Содержание Очередь
– динамическая структура данных, добавление компоненты в которую производится в один конец, а выборка осуществляется с другого конца. Очередь работает по принципу:
FIFO (First-In, First-Out) - поступивший первым, обслуживается первым.
Для формирования очереди и работы с ней необходимо иметь две переменные типа указатель, первая из которых определяет начало очереди, вторая - конец очереди.
Пример. Составить программу, которая формирует очередь, добавляет в нее произвольное количество компонент, а затем читает все компоненты и выводит их на экран дисплея. В качестве данных взять строку символов. Ввод данных – с клавиатуры дисплея, признак конца ввода – строка символов END.
Решение:
Program QUEUE;
uses Crt;
type Alfa= String[10]; {длина строки до 10 символов}
PComp= ^Comp;
Comp=record
sD:Alfa;
pNext:PComp
end;
var pBegin, pEnd: PComp;
sC: Alfa;
Procedure CreateQueue(var pBegin,pEnd: PComp; var sC: Alfa);
begin
New(pBegin);
pBegin^.pNext:=NIL;
pBegin^.sD:=sC;
pEnd:=pBegin
end;
Procedure AddQueue(var pEnd:PComp; var sC:Alfa);
var pAux: PComp;
begin
New(pAux);
pAux^.pNext:=NIL;
pEnd^.pNext:=pAux;
pEnd:=pAux;
pEnd^.sD:=sC
end;
Procedure DelQueue(var pBegin: PComp; var sC: Alfa);
begin
sC:=pBegin^.sD;
pBegin:=pBegin^.pNext
end;
begin
Clrscr;
writeln(' ВВЕДИТЕ СТРОКУ '); readln(sC);
CreateQueue(pBegin,pEnd,sC);
repeat
writeln(' ВВЕДИТЕ СТРОКУ ');
readln(sC);
AddQueue(pEnd,sC)
until sC='END';
writeln(' ----- ВЫВОД РЕЗУЛЬТАТОВ -----');
repeat
DelQueue(pBegin,sC);
writeln(sC);
until pBegin=NIL
end.
Контрольные вопросы
1. Дайте определение динамической структуры «очередь».
2. Сколько элементов может содержать очередь? Как заканчивается очередь?
3. Можно ли последовательно "связать" две очереди разного типа и почему?
4. Можно ли одновременно работать с несколькими очередями?
Упражнения
1. За один просмотр файла действительных чисел и с использованием очереди напечатать элементы файла в следующем порядке: сначала – все числа, меньшие а, затем – все числа из отрезка [а, b], и, наконец – все остальные числа, сохраняя исходный порядок в каждой из этих трех групп чисел. Числа а и b задает пользователь.
2. Из заданного текста перенести все цифры в конец каждой строки, сохранив их порядок.
3. Дан текстовый файл. Выбрать из него числа и занести в очередь. Вывести содержимое очереди на экран и посчитать сумму этих чисел.
4. Дан текстовый файл. Выбрать из него слова, начинающиеся с большой буквы и занести их в очередь. Вывести содержимое очереди на экран и посчитать количество элементов образованной очереди.
5. Проверить на равенство две очереди.
6. Найдите среди трех очередей две одинаковые.
7. Решить задачу 6 применительно к четырем очередям.
8. Организовать три очереди с одинаковым количеством элементов, содержащие соответственно имена, отчества и фамилии людей. Составить очередь из элементов, содержащих информацию о всех людях с заданной фамилией.
9. Имеется файл символьного типа. Организовать очереди по N элементов, cоздать файл слов по N символов в каждом.
10. Имеется файл с натуральными числами, не большими 100. Создать одну очередь однозначных чисел, а вторую очередь двузначных чисел. Перемножить соответственные элементы двух очередей и организовать третью очередь. Результат выведите в текстовый файл.
11. Используя очередь, проверить, какие строки заданного текстового файла являются симметричными.
12. Используя очередь, проверьте на равенство два заданных текстовых файла.
13. Создать две очереди. Проверить, является ли одна из очередей частью другой.