type
pt = ^item;
item = record
data : string[20];
next : pt;
end;
var
stack : pt;
i : integer;
s : string;
procedure stack_push(var stack : pt; data : string[20]);
var
x : pt;
begin
New(x);
x^.data := data;
x^.next := stack;
stack := x;
end;
function stack_pop(var stack : pt) : string[20];
var
tmp : string[20];
x : pt;
begin
tmp := stack^.data;
x := stack;
stack := stack^.next;
Dispose(x);
stack_pop := tmp;
end;
procedure stack_print(stack : pt);
var
t : pt;
begin
t:=stack;
repeat
write(t^.data, ' ');
t:=t^.next;
until t=nil;
end;
begin
stack:=nil;
for i:=1 to 5 do
begin
str(i, s);
stack_push(stack, s);
end;
stack_print(stack);
writeln;
writeln(stack_pop(stack));
writeln(stack_pop(stack));
stack_print(stack);
end.