procedure PutInQue(var Que: PRec; const arg: string);
Два её параметра – это ссылка на очередь (на голову списка) и помещаемая в очередь строка.
Для извлечения из очереди потребуется уже не процедура, а функция, назовем её GetFromQue, и объявим так:
function GetFromQue(var Que: PRec; var arg: string): boolean;
Здесь опять заметно сходство со стеком: как только очередь окажется пустой, функция сообщит об этом, вернув значение FALSE. И тогда мы отвергнем возвращаемый через ссылку arg результат.
Осталось обсудить ещё одну мелочь: организацию входных данных с тем, чтобы отличать мальчиков от девочек. Имена детей поместим в файл «P_56_2.IN», а для различения мальчиков и девочек, впечатаем имена девочек с некоторым отступом (с одним или несколькими пробелами в начале строки). Вот пример такого входного файла.
Ваня
Петя
Гриша
Маша
Наташа
Коля
Семен
Света
Теперь вы готовы рассмотреть программу «P_56_2».
{ P_56_2 – Запись в танцевальный кружок, версия 2 }
type PRec = ^TRec; { Тип указатель на запись }
TRec = record { Тип запись для хранения связанных строк }
mStr : string[31]; { хранимая строка (имя) }
mNext : PRec; { указатель на следующую запись }
end;
{ Процедура размещения строки в очереди }
procedure PutInQue(var Que: PRec; const arg: string);
var p: PRec;
begin
New(p); { создаем новую переменную-запись }
p^.mStr:= arg; { размещаем строку }
{ размещаем указатель в голове очереди }
p^.mNext:= Que; { указатель на предыдущую запись }
Que:=p; { текущая запись в голове очереди }
end;
{ Извлечение строки из начала очереди (из конца списка) }
function GetFromQue(var Que: PRec; var arg: string): boolean;
var p1, p2: PRec;
begin
GetFromQue:= Assigned(Que);
if Assigned(Que) then begin
{ Поиск первого элемента очереди }