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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2010, 16:42   #1
dimorik
Пользователь
 
Регистрация: 23.08.2008
Сообщений: 51
Вопрос Очередь в виде двусвязного списка.

Друзья, просветите пожалуйста может ли очередь быть задана в виде двусвязного списка? Как это? Я без проблем могу реализовать как очередь так и двусвязный список в отдельности, но чтоб очередь в виде двусвязного списка - не понимаю как это. Может кто знает. Подскажите....
dimorik вне форума Ответить с цитированием
Старый 09.06.2010, 16:48   #2
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Конечно же может :
Код:
Queue{
 public:
  void Push( int value ){
    list.push_back( value );
  }
  int Pop(){
    int result = *list.begin();
    list.erase( list.begin() );
    return result;
  }
 protected:
  std::list< int > list;
};
И да, шаблоны наше всё, но для примера сойдёт
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 09.06.2010, 16:58   #3
dimorik
Пользователь
 
Регистрация: 23.08.2008
Сообщений: 51
По умолчанию

Спасибо.. буду разбираться.. а еще примеры есть с коментариями?
dimorik вне форума Ответить с цитированием
Старый 09.06.2010, 17:20   #4
MadReason
Ищу работу
Форумчанин
 
Аватар для MadReason
 
Регистрация: 16.02.2007
Сообщений: 269
По умолчанию

а в чем сложность то? у тебя просто будет не кольцевой двусвязный список. в который добавлять записи можно только в конец очереди, а считывать только из начала, при этом удаляя их.
Пишу на Delphi все что угодно, недорого, красиво, с комментариями
###icq 107335###
MadReason вне форума Ответить с цитированием
Старый 09.06.2010, 17:39   #5
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Очередь - это список, в котором добавление идет в конец, а удаление - из начала. Если в каждом узле будет указатель не только на следующий, а и на предыдущий узел - ничего не изменится.
MaTBeu вне форума Ответить с цитированием
Старый 09.06.2010, 17:57   #6
MadReason
Ищу работу
Форумчанин
 
Аватар для MadReason
 
Регистрация: 16.02.2007
Сообщений: 269
По умолчанию

так не сказано что в каждом узле
Цитата:
будет указатель не только на следующий, а и на предыдущий узел
поэтому можно на "крайние" элементы поставить заглушки в виде NIL. либо хранить их адреса в переменных предназначенных для этого, если писать в виде класса, то будет даже симпатично смотреться
Пишу на Delphi все что угодно, недорого, красиво, с комментариями
###icq 107335###
MadReason вне форума Ответить с цитированием
Старый 09.06.2010, 18:15   #7
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Цитата:
Сообщение от MadReason Посмотреть сообщение
так не сказано что в каждом узле

поэтому можно на "крайние" элементы поставить заглушки в виде NIL. либо хранить их адреса в переменных предназначенных для этого, если писать в виде класса, то будет даже симпатично смотреться
Собственно, а что вы думаете представляет собой двухсвязный список?
MaTBeu вне форума Ответить с цитированием
Старый 09.06.2010, 18:30   #8
MadReason
Ищу работу
Форумчанин
 
Аватар для MadReason
 
Регистрация: 16.02.2007
Сообщений: 269
По умолчанию

"кучку" элементов, каждый из которых содержит блок данных и два указателя на соседние элементы. разве я не прав?
разница в том что можно его сделать кольцевым или линейным, о чем я тоже уже говорил
Пишу на Delphi все что угодно, недорого, красиво, с комментариями
###icq 107335###
MadReason вне форума Ответить с цитированием
Старый 09.06.2010, 21:07   #9
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Кольцевой список может быть и односвязным и двухсвязным, как и линейный. Если говорят про связность списков, то имеют ввиду количество ссылок у каждого узла списка.
MaTBeu вне форума Ответить с цитированием
Старый 10.06.2010, 02:24   #10
MadReason
Ищу работу
Форумчанин
 
Аватар для MadReason
 
Регистрация: 16.02.2007
Сообщений: 269
По умолчанию

Цитата:
"кучку" элементов, каждый из которых содержит блок данных и два указателя на соседние элементы. разве я не прав?
разница в том что можно его сделать кольцевым или линейным, о чем я тоже уже говорил
p.s.
сори за флуд, я не удержался от этого сообщения (
Пишу на Delphi все что угодно, недорого, красиво, с комментариями
###icq 107335###
MadReason вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка двусвязного списка методом шейкера ioda1986 Помощь студентам 0 02.05.2010 00:31
[C++] Шейкер-сортировка двусвязного списка Attenti_ON Помощь студентам 0 17.11.2009 00:24
Ошибка при создании головного элемента двусвязного списка Дамир Помощь студентам 1 16.11.2008 16:09