Шаг 19.
Удаление вершины стека

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

    Рассмотрим процесс выборки компонент из стека. При выборке значения из стека элемент будет потерян, если его не сохранить где-нибудь в памяти.

    Пусть к моменту начала выборки стек содержит три компоненты (см. рис. 1).


Рис.1. Стек, состоящий из трех компонентов

Удаление вершины стека

    Рассмотрим вариант удаления вершины стека.

    Чтение данных из вершины стека можно осуществить при помощи следующего оператора (см. рис. 2 (1)):

 D := pTop^.Element;

    Вспомогательная переменная pAux позволит избавиться от "мусора" (см. рис. 2 (2)):

 pAux := pTop;

    Следующий оператор изменяет значение указателя на вершину стека (см. рис. 2 (3)):

 pTop := pAux^.pNext;


Рис.2. Схема процесса удаления вершины стека

    Следует также удалить ненужную ссылку (см. рис. 2 (4)):

 pAux^.pNext := Nil;

    Не следует забывать об освобождении динамической области памяти:

 Dispose (pAux); 
 pAux := Nil;

    Рассмотрим окончательный вариант процедуры удаления из стека элемента с информационным полем D:

 Procedure Del_Stack(var pTop: PtrRec; var D: TypeElement);
   Var  pAux : PtrRec;
  Begin 
 If  pTop = Nil 
   Then WriteLn ('Попытка выбора из пустого стека!')
   Else
    Begin
      D := pTop^.Element;
      pAux := pTop;
      pTop := pTop^.pNext;
      Dispose(pAux);
      pAux := Nil;
   End;
  End;

    На следующем шаге мы рассмотрим 1) получение значения информационного поля вершины стека, 2) определение наличия элементов в стеке, 3) получение копии стека.




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