Теоретический материал: стеки, очереди, кольца (Паскаль)
Очередь. Основные операции над очередью
Очередь – линейный список, элементы в который добавляются только в конец, а исключаются из начала.
Изобразим очередь графически:
Итак, очередь – это вид связанного списка, в котором извлечение элементов происходит с начала списка, а добавление новых элементов – с конца. К этому виду списка, по определению, неприменима операция обхода элементов.
Очередь является динамической структурой – с течением времени изменяется и колчество, и набор составляющих ее элементов.
Опишем очередь на языке программирования:
Type
|
Над очередью определены две операции: занесение элемента в очередь и извлечение элемента из очереди.
В очереди, в силу ее определения, доступны две позиции: ее конец, куда заносятся новые элементы, и ее начало, откуда извлекаются элементы. Поэтому для работы с очередью необходимо описать две переменные:
Var
|
где BeginO – соответствует началу очереди и будет использоваться для удаления элемента из очереди, EndO – соответствует концу очереди и будет использоваться для добавления новых элементов в очередь.
Занесение элемента в очередь
Занесение элемента в очередь реализуется как добавлению элемента в конец списка. Рассмотрите процедуру, описанную ниже.
Procedure writeO(Var BeginO, EndO : EXO; c : integer);
|
Задание. Создайте программу формирования очереди с использованием предложенной процедуры.
Извлечение элемента из очереди
Процедура извлечения элемента из очереди аналогична удалению элемента из начала списка. Поскольку извлечение элемента из пустой очереди осуществить нельзя, опишем логическую функцию, проверяющую, есть ли элементы в очереди.
Procedure readO(Var BeginO : EXO; Var c : integer);
|
Задание. Напишите программу, содержащую все необходимые процедуры и функции работы с очередью.
Примеры решения задач
Задание. Рассмотрите приведенные программы. Наберите их на компьютере, дополните комментарием и протестируйте. Имейте в виду, что уже рассмотренные выше подпрограммы в текстах задач пропущены.
Пример 1. За один просмотр файла действительных чисел напечатать элементы файла в следующем порядке: сначала – все числа, меньшие а, затем – все числа из отрезка [а, b], и наконец – все остальные числа, сохраняя исходный порядок в каждой из этих трех групп чисел. Числа а и b задает пользователь.
Program MordovskihK;
|
Пример 2. Из заданного текста перенести все цифры в конец каждой строки, сохранив их порядок.
Program BaranovA;
|