Einzelnen Beitrag anzeigen

nkaaa

Registriert seit: 25. Feb 2006
28 Beiträge
 
Delphi 2005 Personal
 
#19

Re: anfänger: stack als klasse erstellen

  Alt 10. Mai 2006, 21:10
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;
Angehängte Dateien
Dateityp: rar stack_als_klasse_123.rar (193,3 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat