На этом шаге мы рассмотрим определение наличия элементов в очереди и удаление первой компоненты из очереди.
Function Empty_Queue (pBegin: PtrRec) : Boolean; Begin Empty_Queue := pBegin = Nil; End;
Пусть в памяти сформирована очередь, состоящая из трех элементов:
Рис.1. Очередь из трех элементов
Выборка компоненты может быть выполнена следующими операторами:
T := pBegin^.Element; {запомним информационное поле первого элемента очереди} pBegin := pBegin^.pNext;{переопределим ссылку на новый первый элемент}
Рис.2. Выборка компоненты из очереди
Учтем все высказанные замечания. Рассмотрим окончательный вариант процедуры выборки первого элемента из очереди.
Procedure Del_Queue(var pBegin: PtrRec; var T:TypeElement); Var pAux : PtrRec; Begin If pBegin = Nil Then Writeln ('Попытка удаления из пустой очереди!') Else Begin T := pBegin^.Element; pAux := pBegin; {запомним предполагаемый "мусор"} pBegin := pBegin^.pNext; pAux^.pNext := Nil; {здесь ссылка не нужна} Dispose(pAux); {удалим "мусор"} pAux := Nil; End; End;
На следующем шаге мы рассмотрим кольцевые однонаправленные списки с включеным заглавным звеном.