Структуры данных Стеки

Слайд 2

Стек (stack) Практическое занятие Program Stack-P; type Pt=^k; k=record d: char;

Стек (stack)

Практическое занятие

Program Stack-P;
type Pt=^k; k=record d: char; p: pt end;
var

ph: Pt; c: char; n: integer;
begin
n:=1;
writeln ('Введите первый элемент ', n:3);
readln (c);
FormSt (ph, c);
repeat
n:=n+1;
writeln (' Введите ', n:3,'-й элемент');
readln (c);
if c<>'.'
then AddSt (ph, c) else break;
AddSt (ph, c);
until c='.';
n:=1;
repeat
DelSt (ph, c);
writeln (n:3,'-й компонент = ', c);
n:=n+1;
until ph=nil;
end.

Сформировать стек, добавить в него N элементов, а затем считать элементы и вывести их на экран. Элементы должны быть символьного типа. Ввод элементов с клавиатуры, признак конца ввода – точка.

type Pt=^k; k=record d: char; p: pt end;
var ph: Pt; c: char;
Procedure FormSt (var ph: Pt; var c: char);
(*Формирование первого элемента стека *)
begin
New (ph); (* создать динамический стек *)
ph^.p := nil; (* указатель конца стека *)
ph^.d := c; (* значение первого элемента *)
end;
Procedure AddSt (var ph: Pt; var c: char);
(* Занесение следующего элемента в стек *)
var px: Pt; (*вспомогательный указатель*)
begin
New(px); (*создание вспомогательного указателя*)
px^.p := ph; (* присвоение вспомогательному указателю адреса очередного элемента стека *)
ph := px; (* сдвиг указателя на вершину стека *)
ph^.d := c; (*занесение элемента в вершину стека*)
end;
Procedure DelSt (var ph: Pt; var c: char);
(* Выборка следующего элемента из стека *)
var px: Pt; (*вспомогательный указатель*)
begin
px := ph; (*сохранение адреса вершины во вспомогательном указателе *)
с := ph^.d; (* чтение значения из вершины *)
ph := ph^.p; (* смещение адреса вершины *)
Dispose (px); (*освобожд. вспомогат. указателя*)
end;

Через указатели и элементы списка

И+ПРГ