Ich versuche gerade das Beispiel für Stapel aus meinem Algorithmenbuch nach zu vollziehen. Mut dem Push und Pop Routinen habe ich noch Verständnis Probleme, was da passiert. Und ich habe Probleme mit dem Pascal Code aus dem Buch.
Der Stack (Ich habe schon die Variablen etwas sinnvoller benannt):
Delphi-Quellcode:
type
PStackElement = ^TStackElement;
TStackElement = record
data: Integer;
next: PStackElement;
end;
var
FirstElement: PStackElement;
LastElement: PStackElement;
procedure Init;
begin
New(FirstElement);
New(LastElement);
FirstElement.next := LastElement;
LastElement.next := LastElement;
end;
procedure push(data: Integer);
var
ElementToPush: PStackElement;
begin
New(ElementToPush);
ElementToPush.data := data;
ElementToPush.next := FirstElement.next;
FirstElement.next := ElementToPush;
end;
function pop: Integer;
var
ElementToPop: PStackElement;
begin
ElementToPop := FirstElement.next;
Result := ElementToPop.data;
FirstElement.next := ElementToPop.next;
Dispose(ElementToPop);
end;
Infix nach Postfix:
Delphi-Quellcode:
Init;
repeat
repeat read(c) until c <> ' ';
if c = ')' then write(chr(pop));
if c = '+' then push(ord(c));
if c = '*' then push(ord(c));
while (c >='0') and (c<='9') do
begin write(c), read(c); end;
if c <> '(' then write (' ');
until eoln;
Ausrechnen eines Postfix-Ausdruckes:
Delphi-Quellcode:
Init;
repeat
x := 0;
repeat read(c) until c <> ' ';
if c = '*' then x := pop*poop;
if c = '+' then x := pop+pop;
while (c >= '0') and (c <= '9') do
begin x := 10*x+(ord(c)-ord('0')); read(c); end;
push(x);
until eoln;
writeln(pop);
Mit den letzten beiden Routinen komme ich gar nicht klar. Ich habe sie mal genauso abgetippt wie sie im Buch stehen inklusive Formatierung. Variablendeklarationen sind im Buch auch nicht gegeben. Wie würden diese beiden Routinen als Delphi Funktionen aussehen? Also ich würde beiden Funktion eine Zeichenkette übergeben. Die erste Routine liefert mir dann eine Postfix Zeichenkette zurück und die zweite Routine das Ergebnis als Integer.