Задача. Дан указатель P1 на вершину стека (если стек пуст, то P1=NIL). Извлеч из стека все элементы и вывести их значения. Вывести также количество известных элементов N (для пустого стека вывести 0). после извлечения элементов из стека освобождать память которую они занимали.
Нашел решение, вот код:
Код
uses crt;
type PSTRC=^Strc;
Strc=record
inf:integer;
ptr:Pstrc;
end;
var S1,s2:PSTRC;
i,k,g,p:integer;
err:boolean;
a:array [1..20] of integer;
Procedure Dop(var S:Pstrc;dat:integer);
var nov:Pstrc;
begin
New(nov);
nov^.inf:=dat;
nov^.Ptr:=s;
S:=nov;
end;
Function Ud(var S:Pstrc; var err:boolean):integer;
var old:Pstrc;
begin
if s<>Nil then
begin
old:=S;
S:=S^.ptr;
Ud:=old^.inf;
dispose(old);
err:=false
end
else
begin
Ud:=0;
err:=true
end
end;
Function Cht(s:PSTRC; var err:boolean):integer;
begin
if s<>Nil then
begin
write('inf=',s^.inf:3);
err:=false;
Cht:=s^.inf;
end
else begin
writeln('stack pust');
err:=True;
cht:=0;
end;
end;
BEGIN
clrscr;
i:=1;
k:=1;
while k<>0 do
begin
readln(k);
Dop(s1,k);
end;
while s1<>Nil do
begin
a[i]:=Ud(s1,err);
inc(i);
end;
for k:=i downto 1 do
dop(s2,a[k]);
for k:=1 to i do
writeln(ud(s2,err));
readln;
END.
type PSTRC=^Strc;
Strc=record
inf:integer;
ptr:Pstrc;
end;
var S1,s2:PSTRC;
i,k,g,p:integer;
err:boolean;
a:array [1..20] of integer;
Procedure Dop(var S:Pstrc;dat:integer);
var nov:Pstrc;
begin
New(nov);
nov^.inf:=dat;
nov^.Ptr:=s;
S:=nov;
end;
Function Ud(var S:Pstrc; var err:boolean):integer;
var old:Pstrc;
begin
if s<>Nil then
begin
old:=S;
S:=S^.ptr;
Ud:=old^.inf;
dispose(old);
err:=false
end
else
begin
Ud:=0;
err:=true
end
end;
Function Cht(s:PSTRC; var err:boolean):integer;
begin
if s<>Nil then
begin
write('inf=',s^.inf:3);
err:=false;
Cht:=s^.inf;
end
else begin
writeln('stack pust');
err:=True;
cht:=0;
end;
end;
BEGIN
clrscr;
i:=1;
k:=1;
while k<>0 do
begin
readln(k);
Dop(s1,k);
end;
while s1<>Nil do
begin
a[i]:=Ud(s1,err);
inc(i);
end;
for k:=i downto 1 do
dop(s2,a[k]);
for k:=1 to i do
writeln(ud(s2,err));
readln;
END.
Не могли бы вы проверить правильно ли он работает и помочь с ним разобраться, нужны хотябы самые общие комментарии по коду.