Шаг 24.
Удаление первой компоненты из очереди

    На этом шаге мы рассмотрим определение наличия элементов в очереди и удаление первой компоненты из очереди.

Определение наличия элементов в очереди

 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;
   

    На следующем шаге мы рассмотрим кольцевые однонаправленные списки с включеным заглавным звеном.




Предыдущий шаг Содержание Следующий шаг