Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
структуры и алгоритмы / Лекции_лабор_структ.doc
Скачиваний:
56
Добавлен:
04.06.2015
Размер:
2.98 Mб
Скачать

3.3 Очереди

Очередь - такой последовательный список с переменной длиной включение элементов в который происходит с одной стороны, а исключение элементов - с другой стороны списка, она функционирует по принципу FIFO (Fist - In - Fist - Out, т.е. "первым пришел - последним исключается"). Та сторона очереди, с которой осуществляется добавление элементов, называется хвостом или концом, очереди, другая - головой. Для индикации хвоста и головы организуются два указателя.

На рис. 3.3 приведена схема простейшей очереди. Для этой очереди выделена конечная последовательность ячеек или слотов, из которых в каждый момент времени элементами очереди заняты лишь часть последовательных слотов. Занятые слоты на рисунке помечены. Слоты имеют адреса . Каждый элемент очереди представляет собой в общем случае запись с одинаковой организацией для всех элементов. Идентификаторы Р1 и Р2 - указатели, причем Р1 - указатель головного элемента очереди, а Р2 - адресует первый свободный слот, следующий за хвостовым элементом.

Основные операции над очередью - включение элемента и исключение элемента. При включении новый элемент заносится в слот, адресуемый указателем Р2, после чего этот указатель должен быть "передвинут" к следующему (пустому) слоту. При исключении из очереди извлекается элемент, адресуемый указателем Р1, и после этого указатель Р1 перемещается к следующему слоту. Возможны и другие операции над очередью.

Из рис.3.3 ясно, что в процессе включения элементов неизбежно наступит переполнение очереди. Это произойдет независимо от того, исключаются ли элементы из очереди или не исключаются, так как состояние переполнения для простейшей очереди означает лишь выход указателя Р2 за пределы отведенного для слотов участка памяти. Такой недостаток схемы, представленной на рис.3.3, можно устранить, если после достижения указателем слота с адресом переводить этот указатель на слот с адресом, если он пуст. Организованная таким образом очередь называется кольцевой, в ней возможно любое из соотношений Р1<Р2, Р1=Р2 и Р1>Р2, причем второе из этих соотношений соответствует пустой очереди.

Пример схемы кольцевой очереди показан на рис.3.4, на котором занятые слоты помечены. Стрелка обозначает факт продолжения или "зацикливания" очереди.

На рис. 3.5 показана схема физической структуры очереди. Имя и другая информация об очереди хранятся в дескрипторе, причем буква Q в первом поле дескриптора является признаком (кодом) очереди.

3.4 Деки

Особым типом списка является дек. Дек (очередь с двумя концами) - это такой последовательный список, в котором как включение, так и исключение элементов может осуществляться с любого из двух концов списка.

Логическая и физическая структуры дека аналогичны логической и физической структурам обычной очереди. Однако применительно к деку целесообразно вместо хвоста и головы говорить о левом конце и правом конце. Важнейшие операции над деком, как и над простой очередью, - включение и исключение элементов. Эти операции представляют собой обобщения и развитие операций включения и исключения элементов, применяемых к очереди. Одним из параметров операций доступа к деку должен быть признак того конца (левого или правого), с которого должна выполняться соответствующая операция.

Соседние файлы в папке структуры и алгоритмы