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

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

использоваться для особых целей. Например, в Разделе 5.3.3, мы показали как

класс DLinkedList Раздела 3.3.3 мог быть адаптирован, чтобы осуществить deque. Экс-cept для дополнительной функции отслеживания ряда элементов, мы просто нанесли на карту каждую deque операцию (такую как insertFront) к соответствующей деятельности DLinkedList (такого как addFront).

Адаптер (также названный оберткой) является структурой данных, например, классом в C ++, который переводит один интерфейс другому. Вы можете думать об адаптере как об аналоге программного обеспечения адаптерам штепселя электроэнергии, которые часто необходимы, когда Вы хотите включить свои электрические приборы в электрические стенные розетки в разных странах.

Как пример адаптации, заметьте, что возможно осуществить стек ADT посредством deque структуры данных. Таким образом, мы можем перевести каждую операцию по стеку к функционально эквивалентной deque операции. Такое отображение представлено в Таблице 5.3.

Размер Метода стека () пустой () вершина () толчок (o) популярность ()

Размер Внедрения Deque () пустой () фронт () insertFront (o) eraseFront ()

Таблица 5.3: Осуществление стека с deque.

Обратите внимание на то, что, из-за симметрии deque, выполняя вставки и пере - movals из задней части deque было бы одинаково эффективно.

Аналогично, мы можем развить корреспонденции для очереди ADT, как показано в Таблице 5.4.

Размер Метода очереди () пустой () фронт () ставит (e) в очередь dequeue ()

Размер Внедрения Deque () пустой () фронт () insertBack (e) eraseFront ()

Таблица 5.4: Осуществление очереди с deque.

Как более конкретный пример шаблона адаптера, считайте кодовый фрагмент показанным в Кодовом Фрагменте 5.23. В этом кодовом фрагменте мы представляем класс DequeStack, который осуществляет стек ADT. Это - внедрение, основано на переводе каждой операции по стеку к соответствующей операции на LinkedDeque, который был введен в Разделе 5.3.3.

222

typedef натягивают Элемент;

класс DequeStack

общественность:

DequeStack (); международный размер () константа; пустой bool () константа;

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

//тип элемента

//сложите как deque

//конструктор//ряд элементов//действительно ли стек пуст?

константа Elem& вершина () бросок константы (StackEmpty);//главный элемент

недействительный толчок (константа Elem& e); недействительная популярность () бросок (StackEmpty);

частный:

LinkedDeque D;

;

//продвиньтесь элемент на стек//суют стек

//deque элементов

Кодовый Фрагмент 5.23: Внедрение интерфейса Stack посредством deque.

Внедрения различных членских функций представлены в Кодовом Фрагменте 5.24. В каждом случае мы переводим некоторую операцию по стеку на corre-sponding deque операция.

DequeStack:: DequeStack ()

: D ()международный DequeStack:: размер () константа

возвращают D.size ();bool DequeStack:: пустой () константа

возвращают D.empty ();

//конструктор

//ряд элементов

//действительно ли стек пуст?

//главный элемент

константа Elem& DequeStack:: вершина () бросок константы (StackEmpty)

если (пустой ())

бросьте StackEmpty («вершина пустого стека»);

возвратите D.front ();

недействительный DequeStack:: продвиньтесь (константа Elem& e)

D.insertFront (e);недействительный DequeStack:: популярность () бросок (StackEmpty)

//выдвиньте элемент на стек

//суйте стек

если (пустой ())

бросьте StackEmpty («популярность пустого стека»); D.removeFront ();

Кодовый Фрагмент 5.24: Внедрение интерфейса Stack посредством deque.