Очередь

Рассмотрим структуру данных "очередь", которая имитирует поведение обычной очереди. Туда помещаются элементы, а когда мы готовы "обслужить" очередной элемент, мы его оттуда извлекаем (причем извлекаются элементы из очереди ровно в том порядке, в котором они туда добавлялись).

Вам дан набор процедур, реализующих работу с очередью (пока мы не вдаемся в подробности реализации, вам достаточно лишь скопировать эту программу и прочитать, как использовать очередь в своей программе). Вы можете скопировать текст программы, приведенный выше, или скачать 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 в первой строке программы.