На этом шаге мы рассмотрим удаление вершины стека.
Рассмотрим процесс выборки компонент из стека. При выборке значения из стека элемент будет потерян, если его не сохранить где-нибудь в памяти.
Пусть к моменту начала выборки стек содержит три компоненты (см. рис. 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) получение копии стека.