Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_na_voprosy_k_ekzamenu_po_AiSD.docx
Скачиваний:
42
Добавлен:
29.04.2019
Размер:
417.06 Кб
Скачать

7. Очередь.

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

На рис. 2. 13 приведена очередь, содержащая четыре элемента — А, В, С и D. Элемент А расположен в начале очереди, а элемент D — в ее конце. Элементы могут удалять­ся только из начала очереди, то есть первый помещаемый в очередь элемент удаляется первым. По этой причине очередь часто называют списком, организованным по принципу «пер­вый размещенный первым удаляется» в противоположность принципу стековой организации — «последний размещенный первым удаляется».

Дисциплину обслуживания, в которой заказ, поступив­ший в очередь первым, выбирается первым для обслужива­ния (и удаляется из очереди), называется FIFO (First In First Out - Первым пришел, первым ушел). Очередь открыта с обеих сторон.

Таким образом, изъятие компонент происходит из нача­ла очереди, а запись - в конец. В этом случае вводят два ука­зателя: один - на начало очереди, второй - на ее конец.

Реальная очередь создается в памяти ЭВМ в виде одно­мерного массива с конечным числом элементов, при этом не­обходимо указать тип элементов очереди, а также необходи­ма переменная в работе с очередью.

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

Операции, производимые над очередью:

Операция insert (q,x) - помещает элемент х в конец очереди q.

Операция remove (q) удаляет элемент из начала очереди q и присваивает его значение переменной х.

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

Операция full (q) - вводится с целью предотвращения возможности переполнения одномерного массива, на котором реализуется полустатическая очередь.

Алгоритмы основных операций с очередью

Full (q)

if R = maxQ then full = true

else full = false

endif

return

Empty (q)

if R < F then empty = true

else empty = false

endif

return

Insert (q, X)

Full (q)

if full = true then ‘переполнение’

stop

return

endif

R = R + 1

q(R) = x

return

Remove (q)

Empty (q)

if empty = true then ‘пусто’

stop

return

endif

x = q(F)

F = F + 1

return

8) Пример работы с очередью с использованием стандартных процедур.

maxQ = 5

R = 0, F = 1

Условие пустоты очереди R < F (0 < 1)

Произведем вставку элементов A, B и C в очередь:

Insert (q, A);

Insert (q, B);

Insert (q, C);

Убираем элементы A и B из очереди:

Remove (q);

Remove (q);

Добавляем элементы D и E:

Insert (q, D);

Insert (q, E);

Убираем элементы С,D и E из очереди:

Remove (q);

Remove (q);

Remove (q).

Возникла абсурдная ситуация, при которой очередь является пустой (R < F), однако новый элемент разместить в ней нельзя, так как R = maxQ.

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

Переменная F больше не требуется, поскольку первый элемент массива всегда является началом очереди.

Пустая очередь представлена очередью, для которой значение R равно нулю.

Произведем вставку элементов A, B и C в очередь:

Insert (q, A);

Insert (q, B);

Insert (q, C);

Убираем элемент A из очереди:

Remove (q)

Операция remove (q) может быть в этом случае реализована следующим образом:

Remove (q)

x = q(1)

for i =1 to R-1

q(i) = q(i+1)

next i

R =R-1

return

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

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

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