
5.1. Создание стека
1. Исходное состояние:
Beg :=nil;
2. Выделение памяти под 1-й элемент стека и занесение информации в первый элемент стека:
new(p);
p^.inf:=5;
p^.uk:=nil;
3. Установка вершины стека Веg на созданный элемент:
Веg:=p;
5.2. Добавление элемента в стек
1. Исходное состояние:
2. Выделение памяти под новый элемент:
new(p);
3. Занесение информации в новый элемент и установка связи между "старой" вершиной стека Веg и новым элементом:
p^.inf:=F;
p^.uk:=Beg;
Перемещение вершины стека Веg на новый элемент:
Beg:=p;
5.3. Удаление элемента из стека
Исходное состояние:
Установка на удаляемый элемент вспомогательного элемента р:
p:= Beg;
3. Занесение информации из информационного поля вершины стека Веg в переменную Val:
Val:= Beg^.inf;
4. Перестановка указателя вершины стека Веg на следующий элемент:
Beg:=p^.uk;
5. Освобождение памяти, занимаемой "старой" вершиной стека Вeg, используя дополнительный указатель р:
dispose(p).
Пример.
Составить программу, которая формирует стек, добавляет в
него произвольное количество компонент, а затем читает все компоненты
и выводит их на экран дисплея.
В качестве данных взять строку символов.
Ввод данных – с клавиатуры дисплея, признак конца ввода – строка символов END.
program stek;
uses crt;
type
str= string[10];
uk_stack= ^stack;
stack= record
inf: str;
next: uk_stack
end;
var
Beg: uk_stack;
s: str;
procedure sozd_stack(var Beg: uk_stack; var s: str);
begin
new(Beg);
Beg^.next:=nil;
Beg^.inf:=s
end;
procedure dob_el_stack (var Beg: uk_stack; var s: str);
var p: uk_stack;
begin
new(p);
p^.next:=Beg;
Beg:=p;
Beg^.inf:=s
end;
procedure ud_el_stack(var Beg: uk_stack; var s: str);
begin
s:=Beg^.inf;
Beg:=Beg^.next
end;
begin
clrscr;
writeln('Vvedite slovo');
readln(s);
sozd_stack(Beg,s);
repeat
writeln('Vvedite slovo, konez - END');
readln(s);
dob_el_stack (Beg,s);
until s='END';
writeln('****** STACK ******');
repeat
ud_el_stack (Beg,s);
writeln(s);
until Beg = nil;
readln
end.