Структуры и алгоритмы обработки данных. Ключарев А.А - 45 стр.

UptoLike

45
для работы с ним достаточно иметь один указатель на любой элемент
списка, здесь целесообразно хранить два указателя – один на начало
списка (откуда извлекаем элементы) и один на конец списка (куда до-
бавляем элементы). Если очередь пуста, то списка не существует и ука-
затели принимают значение nil.
Поскольку очередь, по своей сути, является структурой с изменяе-
мым количеством элементов, то основное внимание уделим дина-
мической реализации очереди. Как уже говорилось выше, для такой
реализации целесообразно использовать линейный двунаправленный
список. Поэтому при описании динамической реализации будем исполь-
зовать определения и операции, приведенные в 1.2.6.2.
Описание элементов очереди аналогично описанию элементов ли-
нейного двунаправленного списка, где DataType является типом эле-
ментов очереди. Поэтому здесь приводить его не будем, но введем до-
полнительно два указателя на начало и конец очереди:
var
ptrBeginQueue,
ptrEndQueue: PElement;
Основные операции, производимые с очередью:
– добавить элемент;
– извлечь элемент;
– очистить очередь;
– проверка пустоты очереди.
Реализацию этих операций приведем в виде соответствующих про-
цедур, которые, в свою очередь, используют процедуры операций с ли-
нейным двунаправленным списком:
procedure InQueue(NewElem: TypeData;
var ptrBeginQueue, ptrEndQueue: PElement);
{Добавление элемента в очередь}
begin
Ins_LineDoubleList(NewElem, ptrBeginQueue, ptrEndQueue);
end;
procedure FromQueue(var NewElem: TypeData;
var ptrBeginQueue: PElement);
{Извлечение элемента из очереди}
begin
if ptrBeginQueue <> nil then begin