Re: Problem mit Zeigern
Zitat:
|
Re: Problem mit Zeigern
[OT] Gibt es hier eigentlich noch kein Tut zu einfach/doppelt verketteten Listen? Wäre ja mal 'ne schöne Gelegenheit, sich mit seinem neuen Delphi vertraut zu machen :mrgreen: [/OT]
|
Re: Problem mit Zeigern
tja, mal 'n hinweis, hier wird das thema auch behandelt: hier
ausserdem gibts massenweise threads und tutorials über verkettete listen z.b.verkettete listen, verkettete listen, verkettete listen |
Re: Problem mit Zeigern
Also, Tuts hab ich auf Anhieb keine entdeckt, und bei den meisten (aktuellen) gefundenen Threads innerhalb der DP war ich selbst beteiligt ;)
|
Re: Problem mit Zeigern
ich hab noch ein kleines problem...
und zwar, wenn ich nun eine zweite liste erzeuge und dort soll die erste in umgekehrter reihenfolge hineingeschrieben werden..... dafür habe ich zkopf und zkopf2 in der ersten unit deklariert...die waren vorher gar nicht deklariert allerdings bekomme ich jetzt immer diese fehlermeldung: [Fehler] Unit1.pas(51): Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen hier nocheinmal die zugehörige Prozedur:
Delphi-Quellcode:
die pop-funktion:
procedure TForm1.Button1Click(Sender: TObject);
VAR laeng,i:byte; zkopf,zkopf2 :tzeiger; begin init(zkopf); laeng:=length(edit1.Text); FOR i:=1 TO laeng DO push(zkopf,edit1.text[i]); init(zkopf2); FOR i:=1 TO laeng DO push(zkopf2,pop(zkopf)); edit1.text:=top(zkopf2); end;
Delphi-Quellcode:
FUNCTION pop(VAR zkopf:tzeiger):char;
VAR zhilf1,zhilf2:tzeiger; z:char; BEGIN zhilf1:=zkopf; zhilf2:=zkopf^.next; WHILE NOT(zhilf2^.next = NIL) DO BEGIN zhilf1:=zhilf2; zhilf2:=zhilf2^.next; END; zhilf1^.next:=NIL; pop:=zhilf2^.inhalt; END; und die im vorigen teil besprochene push prozedur:
Delphi-Quellcode:
danke
PROCEDURE push(VAR zkopf:tzeiger;inhalt:char);
VAR zhilf, zneu:tzeiger; BEGIN //erstes Element soll angelegt werden if zkopf = nil then begin new(zhilf); zhilf^.inhalt := inhalt; zhilf^.next := nil; zkopf := zhilf; end //eine weiteres Element soll angehängt werden else begin zhilf:=zkopf; while (zhilf <> nil) and (zhilf^.next <> nil) do zhilf:=zhilf^.next; new(zneu); zneu^.inhalt:=inhalt; zneu^.next:=NIL; zhilf^.next:=zneu; end; END; |
Re: Problem mit Zeigern
Würde statt
Delphi-Quellcode:
FUNCTION pop(VAR zkopf:tzeiger):char;
VAR zhilf1,zhilf2:tzeiger; z:char; BEGIN zhilf1:=zkopf; zhilf2:=zkopf^.next; WHILE NOT(zhilf2^.next = NIL) DO BEGIN zhilf1:=zhilf2; zhilf2:=zhilf2^.next; END; zhilf1^.next:=NIL; pop:=zhilf2^.inhalt; END; nicht einfach nur
Delphi-Quellcode:
genügen?
FUNCTION pop(VAR zkopf:tzeiger):char;
BEGIN result:=zkopf^.inhalt; zkopf := zkopf^.next END; |
Re: Problem mit Zeigern
Achso, nein würde es nicht, weil du ja keine FIFO-Schlage sondern einen LIFO-Keller willst. Sorry ;-)
Allerdings würde mein Vorschlag passen, wenn du für das Push auch eine entsprechende Prozedur verwenden würdest, die das neue Element am Anfang einfügt, die übrigens viel einfacher wäre. |
Re: Problem mit Zeigern
Zitat:
denn, wenn zkopf das erste element ist und pop jeweils das letzte entfernen und freigeben soll muss ich ja solange in der liste weitergehen, bis ein element auf nil zeigt, oder? bei mir hängts im moment an der letzten zeile der pop prozedur
Delphi-Quellcode:
es kommt wieder jedesmal ein exeption fehler
FUNCTION pop(VAR zkopf:tzeiger):char;
VAR zhilf1,zhilf2:tzeiger; BEGIN zhilf1:=zkopf; zhilf2:=zkopf^.next; WHILE (zhilf2 <> nil) AND (zhilf2^.next <> NIL) DO BEGIN zhilf1:=zhilf2; zhilf2:=zhilf2^.next; END; zhilf1^.next:=NIL; pop:=zhilf2^.inhalt; END; |
Re: Problem mit Zeigern
Schau mal, so klappts:
Delphi-Quellcode:
PROCEDURE push(VAR zkopf:tzeiger;inhalt:Char);
var zhilf:tzeiger; BEGIN new(zhilf); zhilf^.inhalt:=inhalt; zhilf^.next:=zkopf; zkopf:=zhilf END; FUNCTION pop(VAR zkopf:tzeiger):char; BEGIN result:=zkopf^.inhalt; zkopf := zkopf^.next END; Hab ich erfolgreich gesetet mit:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var tmp:tzeiger; begin push(tmp,'a'); push(tmp,'b'); push(tmp,'c'); showmessage(pop(tmp)); //c showmessage(pop(tmp)); //b showmessage(pop(tmp)); //a end; |
Re: Problem mit Zeigern
Zitat:
probiers gleich mal mit deiner vorgeschlagenen prozedur |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:39 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz