Очередь
Рассмотрим структуру данных "очередь", которая имитирует поведение обычной очереди. Туда помещаются элементы, а когда мы готовы "обслужить" очередной элемент, мы его оттуда извлекаем (причем извлекаются элементы из очереди ровно в том порядке, в котором они туда добавлялись).
Вам дан набор процедур, реализующих работу с очередью (пока мы не вдаемся в подробности реализации, вам достаточно лишь скопировать эту программу и прочитать, как использовать очередь в своей программе). Вы можете скопировать текст программы, приведенный выше, или скачать pas-файл или взять программу queue.pas с диска J:.
const q_size=100; var q:array[1..q_size] of integer; uk1,uk2:integer; procedure q_init; begin uk1:=0; uk2:=0; end; procedure q_add(v:integer); begin uk1:=uk1+1; if uk1>q_size then runerror(43); q[uk1]:=v; end; function q_next:integer; begin uk2:=uk2+1; if uk2>uk1 then runerror(43); q_next:=q[uk2]; end; function q_empty:boolean; begin q_empty:=uk1=uk2; end; begin q_init; end.
В начале работы программы вы должны из своей программы вызвать процедуру q_init;, которая подготовит очередь к работе. Это нужно сделать один раз (лучше - в начале программы).
Когда вы хотите поместить какое-либо значение в очередь, вы должны вызвать процедуру q_add, указав в скобках помещаемое число. Например, чтобы поместить в очередь число 43, нужно написать q_add(43);, а чтобы поместить число, которое записано в переменной x - q_add(x);.
Чтобы извлечь из очереди число и поместить его в какую-либо переменную, надо этой переменной присвоить результат функции q_next. Например, чтобы взять из очереди очередное число и поместить его в переменную x, надо написать: x:=q_next;. Если очередь окажется пустой, то программа выполнит run-time error 43.
Проверить, пуста ли очередь, можно, вызвав функцию q_empty. Результат будет истинен, если очередь пуста. Например: if q_empty then write('пусто') else write('не пусто');. Еще пример - эта конструкция будет до тех пор пока очередь не пуста извлекать число из очереди и печатать его на экран: while not q_empty do write(q_next);
В данной программе очередь расчитана на 100 элементов. Изменить это можно изменив константу q_size в первой строке программы.