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

5.2. Очереди

209

фронт (): Возвратитесь, но не удаляйте, ссылка на фронт ele-

ment в очереди; ошибка происходит, если очередь пуста. Очередь ADT также включает следующие членские функции поддержки:

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

пустой (): Возвратитесь верный, если очередь пустая и ложная иначе. Мы иллюстрируем операции в очереди ADT в следующем примере.

Пример 5.4: следующая таблица показывает ряд операций очереди и их эффектов на первоначально пустую очередь, Q, целых чисел.

Операция

Продукция

фронт¬ Q¬ задняя часть

поставьте в очередь (5)

-

(5)

поставьте в очередь (3)

-

(5, 3)

фронт ()

5

(5, 3)

размер ()

2

(5, 3)

dequeue ()

-

(3)

поставьте в очередь (7)

-

(3, 7)

dequeue ()

-

(7)

фронт ()

7

(7)

dequeue ()

-

()

dequeue ()

«ошибка»

()

пустой ()

верный

()

5.2.2 Очередь STL

Стандартная Библиотека Шаблона обеспечивает внедрение очереди. Как с

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

#include <очередь>

использование станд.:: очередь; //делают очередь доступной очередью <oat> myQueue; //очередь floats

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

Очередь STL поддерживает примерно тех же самых операторов как наш интерфейс, но синтаксис и семантика немного отличаются. Ниже, мы перечисляем основного участника

210

Глава 5. Стеки, Очереди и функции Deques. Позвольте q, как объявлять, быть очередью STL и позволять e обозначить единственный объект, тип которого совпадает с основным типом очереди. (Например, q - очередь floats, и e - float.)

размер (): Возвратите ряд элементов в очереди. пустой (): Возвратитесь верный, если очередь пустая и ложная иначе. продвиньтесь (e): Поставьте e в очередь с задней стороны очереди.

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

В отличие от нашего интерфейса очереди, очередь STL обеспечивает доступ к обоим фронт

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

5.2.3 C ++ интерфейс очереди

Наш интерфейс для очереди ADT дан в Кодовом Фрагменте 5.15. Как со стеком

ADT, класс - templated. Основной тип E элемента очереди обеспечен пользователем.

шаблон <typename E>

Очередь класса //интерфейс для очереди

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

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

//

число пунктов в очереди

пустой bool () константа;

//

действительно ли очередь пуста?

константа E& фронт () бросок константы (QueueEmpty);

//

передний элемент

пустота ставит в очередь (константа E& e);

//

поставьте элемент в очередь с задней стороны

пустота dequeue () бросок (QueueEmpty);

//

элемент dequeue на фронте

;

Кодовый Фрагмент 5.15: неофициальный интерфейс Queue (не полный C ++ класс).

Обратите внимание на то, что у размера и пустых функций есть то же самое значение как их coun-terparts в Стеке ADT. Эти две членских функции и фронт известны как accessor функции, поскольку они возвращают стоимость и не изменяют содержание структуры данных. Также отметьте использование исключения QueueEmpty, чтобы указать на ошибочное состояние пустой очереди.

Участник функционирует, размер, пустой, и фронт, как все объявляют, является константой,

который сообщает компилятору, что они не изменяют содержание очереди. Отметить