Список выводит элементы попорядку, а стек - в обратном порядке.
Код:
type
tData = integer;
tPtr = ^tNode;
tNode = record
data: tData;
next: tPtr;
end;
tStack = record
first, last: tPtr;
end;
var
S: tStack;
D: tData;
function NotEmpty (var S: tStack): boolean; {проверка стека на пустоту}
begin
NotEmpty := S.First <> nil;
end;
procedure Build (var S: tStack; D: tData); {первоначальное заполнение стека}
var
f: text;
p: tPtr;
begin
assign (f,'stack.txt');
reset (f);
S.First := nil;
S.Last := nil;
while not eof(f) do begin
New(p);
readln (f, D);
p^.data := D;
if S.First = nil then
S.First := p
else
S.Last^.next := p;
S.Last := p;
end;
close(f);
end;
procedure Push (var S: tStack; D: tData); {добавить элемент}
var
p: tPtr;
begin
write ('Item = ');
readln (D);
New(p);
p^.data := D;
S.Last^.next := p;
D := 0;
end;
procedure Pop (var S: tStack; var D: tData); {изъять элемент}
var
p: tPtr;
begin
if NotEmpty(S) then begin
D := S.Last^.data;
p^ := S.Last^;
S.Last := S.Last^.next;
p^.next := nil;
{ Dispose(p); }
end;
end;
procedure Clear;
begin
end;
procedure Echo (S: tStack); {вывод стека на экран}
var
p: tPtr;
begin
{p^ := S.Last^;}
while S.Last <> nil do begin
Pop (S, D);
writeln (D);
Echo (S);
end;
end;
В данном случае ECHO возвращает последний элемент стека и два нолика.
Почему?
Может я и правда каких-то серьёзных ошибок в этом коде не вижу?
Если что, хотелось бы пользоваться только p^.next, а p^.prev не пользоваться ^^