Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

5.3. Симметричные очереди 217

5.3 Симметричные Очереди

Рассмотрите теперь подобную очереди структуру данных, которая поддерживает вставку и удаление и на фронте и на задней части очереди. Такое расширение очереди называют двойным - законченная очередь или deque, который обычно объявляется «палубой», чтобы избежать беспорядка с dequeue функцией регулярной очереди ADT, который объявлен как сокращение «D.Q». Легкий способ помнить произношение «палубы» состоит в том, чтобы заметить, что deque походит на палубу карт в руках изогнутого дилера карты - возможно иметь дело и от вершины и от основания.

5.3.1 Абстрактный тип данных Deque

Функции deque ADT следующим образом, где D обозначает deque:

insertFront (e): Вставьте новый элемент e в начале deque.

insertBack (e): Вставьте новый элемент e в конце deque.

eraseFront (): Удалите первый элемент deque; ошибка происходит если

deque пуст.

eraseBack (): Удалите последний элемент deque; ошибка происходит если

deque пуст.

Кроме того, deque включает следующие функции поддержки:

фронт (): Возвратите первый элемент deque; ошибка происходит если

deque пуст.

назад (): Возвратите последний элемент deque; ошибка происходит если

deque пуст.

размер (): Возвратите ряд элементов deque.

пустой (): Возвратитесь верный, если deque пустой и ложный иначе. Пример 5.5: следующий пример показывает ряд операций и их ef-fects на первоначально пустом deque, D, целых чисел.

Операция

Продукция

D

insertFront (3)

-

(3)

insertFront (5)

-

(5, 3)

фронт ()

5

(5, 3)

eraseFront ()

-

(3)

insertBack (7)

-

(3, 7)

назад ()

7

(3, 7)

eraseFront ()

-

(7)

eraseBack ()

-

()

218 Глава 5. Стеки, очереди и Deques

5.3.2 STL Deque

Как со стеком и очередью, Стандартная Библиотека Шаблона обеспечивает implemen-

tation deque. Основное внедрение основано на векторном классе STL (Разделы 1.5.5 и 6.1.4). Образец использования подобен тому из стека STL и очереди STL. Во-первых, мы должны включать файл определения «deque». Так как это - член станд. namespace, мы должны или снабдить каждое использование предисловием «станд.:: deque» или предоставляют соответствующее заявление «использования». deque класс - templated с основным типом отдельных элементов. Например, кодовый фрагмент ниже объявляет deque последовательностей.

#include <deque>

использование станд.:: deque; //делают deque доступный deque <последовательность> myDeque; //deque последовательностей

Как со стеками STL и очередями, STL deque динамично изменяет размеры себя, поскольку добавлены новые элементы.

С незначительными различиями STL deque класс поддерживает тех же самых операторов как

наш интерфейс. Вот список основных операций.

размер (): Возвратите ряд элементов в deque.

пустой (): Возвратитесь верный, если deque пустой и ложный иначе. выдвиньте фронт (e): Вставьте e вначале, deque. пододвигают (e) обратно: Вставьте e в конце deque.

суйте фронт (): Удалите первый элемент популярности deque. назад (): Удалите последний элемент deque.

фронт (): Возвратите ссылку на первый элемент deque. назад (): Возвратите ссылку на последний элемент deque.

Подобный стекам STL и очередям, результату применения любой из операций

фронт, назад, фронт толчка, или пододвигают обратно пустой очереди STL, не определено. Таким образом никакое исключение не брошено, но программа может прерваться.

5.3.3 Осуществление Deque с вдвойне связанным списком

В этой секции мы показываем, как осуществить deque ADT использование связанного repre-

sentation. Как с очередью, deque поддерживает эффективный доступ в обоих концах списка, таким образом, наше внедрение основано на использовании вдвойне связанного списка. Снова, мы используем вдвойне связанный класс списка, названный DLinkedList, который был представлен ранее в Разделе 3.3.3. Мы помещаем фронт deque во главе связанного списка и задней части очереди в хвосте. Пример приведен в рисунке 5.7.