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

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

Рисунок 5.7: вдвойне связанный список со стражами, заголовком и трейлером. Фронт нашего deque сохранен сразу после заголовка («JFK»), и задняя часть нашего deque сохранена как раз перед трейлером («SFO»).

Определение получающегося класса, названного LinkedDeque, показывают в Кодовом Фрагменте 5.21. deque сохранен в участнике данных Д. Чтобы поддержать функцию размера, мы также поддерживаем размер очереди в участнике n. Как в некоторых наших более ранних внедрениях, мы избегаем синтаксического беспорядка, врожденного от C ++ templated классы, и вместо этого используем просто определение типа, чтобы определить основной тип элемента deque.

typedef натягивают Элемент; //deque тип элемента

класс LinkedDeque //deque как вдвойне связанный список

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

LinkedDeque (); //размер интервала конструктора () константа; //число пунктов в deque bool пустой () константа; //действительно ли deque пуст?

константа Elem& фронт () бросок константы (DequeEmpty);//первая константа элемента Elem& назад () бросок константы (DequeEmpty);//последний элемент

пустота insertFront (константа Elem& e); //вставляют новую первую пустоту элемента insertBack (константа Elem& e); //вставляют новый последний элемент

пустота removeFront () бросок (DequeEmpty);//удаляют первую пустоту элемента removeBack () бросок (DequeEmpty);//удаляют последний элемент

частный: //членские данные

DLinkedList D; //связанный список интервала элементов n; //ряд элементов

;

Кодовый Фрагмент 5.21: структура класса для класса LinkedDeque.

Мы не потрудились обеспечивать явную печь для сжигания отходов производства, потому что класс DLinkedList обеспечивает свою собственную печь для сжигания отходов производства, которая автоматически призвана, когда наш Связанный - структура Deque разрушена.

Большинство членских функций для класса LinkedDeque - прямые обобщения соответствующих функций класса LinkedQueue, таким образом, мы опустили их. В Кодовом Фрагменте 5.22, мы представляем внедрения членских функций для выполнения вставок и удалений элементов от deque. Заметьте, что в каждом случае мы просто призываем соответствующую операцию от основного объекта DLinkedList.

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

//вставьте новый первый элемент

недействительный LinkedDeque:: insertFront (константа Elem& e)

D.addFront (e);

n + +;

//вставьте новый последний элемент

недействительный LinkedDeque:: insertBack (константа Elem& e)

D.addBack (e);

n + +;

//удалите первый элемент

недействительный LinkedDeque:: removeFront () бросок (DequeEmpty)

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

бросьте DequeEmpty («removeFront пустого deque»); D.removeFront ();

n-;

//удалите последний элемент

недействительный LinkedDeque:: removeBack () бросок (DequeEmpty)

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

бросьте DequeEmpty («removeBack пустого deque»); D.removeBack ();

n-;

Кодовый Фрагмент 5.22: вставка и удаление функционируют для LinkedDeque.

Таблица 5.2 показывает продолжительность функций в реализации deque a

вдвойне связанный список. Обратите внимание на то, что каждая функция deque ADT бежит в O (1) время.

Операция Время

си z e O (1)

пустой O (1)

фронт, назад O (1) insertFront, insertBack O (1)

eraseFront, eraseBack O (1)

Таблица 5.2: Исполнение deque, понятого вдвойне связанным списком. Космическое использование

O (n), где n - ряд элементов в deque.

5.3.4 Адаптеры и шаблон адаптера

Контроль кодовых фрагментов Разделов 5.1.5, 5.2.5, и 5.3.3, показывает com-образец в понедельник. В каждом случае мы взяли существующую структуру данных и приспособили его

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]