habe das programm soweit verbessert, zumindest kommen jetzt keine abstürze mehr.
allerdings ist wohl irgendwo ein fehler in der push oder pop procedure.
ich kann elemente in den stack packen und er zeigt mir auch immer das oberste elemente mit "getfirstitem",
aber wenn ich einmal die pop procedure ausführe wird nur noch (meine
exception) angezeigt "Keine Elemente im Stack".
hab jetzt schon ne ganze zeit lang geguckt, finde den fehler aber nicht
Delphi-Quellcode:
type
Pinfo = ^Tinfo;
Tinfo = Record
info : String;
next : Pinfo;
End;
Tstack = class(Tobject)
constructor create;
procedure pop; //Element vom Stack runterschmiessen, OHNE es zurückzuliefern!
procedure push(info : String); //Element draufpacken
function empty : Boolean; //Ist der Stack leer?
function GetFirstItem : String; //Liefert das erste Element vom Stack zurück
destructor destroy;
private
first : Pinfo; //Zeiger auf das erste Element im Stack
end;
var
Form1: TForm1;
var
st : Tstack;
implementation
{$R *.dfm}
constructor Tstack.create;
begin
inherited;
end;
procedure Tstack.pop;
var help : Pinfo;
begin
if not empty then
begin
help:=first;
first:=first^.next;
dispose(help);
end;
end;
procedure Tstack.push(info : String);
var help : Pinfo;
begin
new(help);
help^.info:=info;
help^.next:=nil;
if not empty then first:=help
else
begin
help.next:=first;
first:=help;
end;
end;
function Tstack.empty : Boolean;
begin
result:=(First=nil);
end;
function Tstack.GetFirstItem : String;
begin
if not empty then result:=first^.info
else result:='Kein Element im Stack';
end;
destructor Tstack.destroy;
begin
inherited;
//fehlt noch: nacheinander alle stackelemente "disposen"
end;
procedure TForm1.createClick(Sender: TObject);
begin
st := TStack.Create;
end;
procedure TForm1.pushClick(Sender: TObject);
begin
st.push(edit1.text);
end;
procedure TForm1.popClick(Sender: TObject);
begin
st.pop;
end;
procedure TForm1.Oberstes_ItemClick(Sender: TObject);
begin
showmessage(st.GetFirstItem);
end;