Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2011, 02:55   #1
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию Организация очереди и стека (Без STL)

Доброго времени суток. Посоветуйте какую-нить полезную информацию, а то не примеров нормальных не увидел не объяснений не нашел.
Спасибо за ранее.
coNsept вне форума Ответить с цитированием
Старый 21.04.2011, 07:24   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Стек можно организовать при помощи динамических массивов.
При загрузке в стек - элемент массива добавляется, при выгрузке - удаляется.
С очередью несколько сложнее, т.к. необходимо элемент добавлять в конец очереди,
а удалять из начала. В этом случае могут помочь динамические сткуктуры.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 21.04.2011, 21:00   #3
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Вариант 1 - на массивах
Код:
int stack[256],stack_pos=0; //stack_pos это текущее количество элементов в стеке
//push (засунуть элемент на вершину стека)
stack[stack_pos++]=x;
//pop (взять элемент с вершины стека)
x=stack[--stack_pos];
Код:
int queue[256],queue_start=0,queue_end=0; // очередь, ее начало и конец
// добавление элемента в конец очереди
queue[queue_end]=x;
queue_end=(queue_end+1)%256;
// взять элемент из начала очереди
x=queue[queue_start];
queue_start=(queue_start+1)%256;
Вариант 2 - на списках
Код:
struct stack{
  int data;
  stack *next;
};

void push(stack *s,int *n){
  while(s->next)s=s->next; //находим последний элемент стека
  s->next=new stack;
  s->next->data=n;
  s->next->next=0; // у нового элемента указатель на следующий равен нулю - маркер конца
};

int pop(stack *s){
  while(s->next->next)s=s->next; //находим предпоследний элемент
  int n=s->next->data;
  delete s->next;
  s->next=0;
  return n;
};
Код:
struct queue_element{
  int data;
  queue_element *next;
};

struct queue{
  queue_element *start,*end;
};

void put(queue *q,int n){
  q->end->next=new queue_element;
  q->end=q->end->next;
  q->end->data=n;
  q->end->next=0;
};

int get(queue *q){
  int n=q->start->data;
  queue_element *temp=q->start->next;
  delete q->start;
  q->start=temp;
  return n;
};
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
организация очереди в vс++ Victoria9019 Visual C++ 1 09.01.2011 23:45
Создание очереди с использованием элементов стека Авторитет Общие вопросы C/C++ 1 11.04.2010 19:33
Cравнение элементов очереди. STL. Lazio Помощь студентам 0 11.11.2009 00:16
Объявление и инициализация двусторонней очереди (С++ STL) lelik759 Помощь студентам 1 05.11.2009 00:21