Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lin_St.doc
Скачиваний:
1
Добавлен:
15.12.2018
Размер:
89.09 Кб
Скачать

Содержание Очередь

– динамическая структура данных, добавление компоненты в которую производится в один конец, а выборка осуществляется с другого конца. Очередь работает по принципу:

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. Создать две очереди. Проверить, является ли одна из очередей частью другой.

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