Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Prism Liste mit Zeigern (https://www.delphipraxis.net/112450-liste-mit-zeigern.html)

Damaster 21. Apr 2008 20:16

Re: Liste mit Zeigern
 
ok
wieso heist es dan in dem fall nicht anker.naechster? anker ist vom typ pzeiger.
normal ist es doch der teil hinter dem punkt also ".naechster" der irgendwohin zeigt.
anker:=pak da wird ja noch der Stringteil mitübergeben, oder etwa nicht?
weiter unten hat Klaus ja list^.naechster:=dummy geschrieben. Wieso geht dann hier nicht anker^.naechster:=pak?

mkinzler 21. Apr 2008 20:21

Re: Liste mit Zeigern
 
Weil das ein Zeiger auf den Nachfolger des Elements (also das 2. Element ist)
Zitat:

anker:=pak da wird ja noch der Stringteil mitübergeben, oder etwa nicht?
Nein der Zeiger Anker wird auf die Adresse gesetzt, welche auch pak referenziert.
Zitat:

weiter unten hat Klaus ja list^.naechster:=dummy geschrieben. Wieso geht dann hier nicht anker^.naechster:=pak?
Weil Amker Nil ist.

Damaster 21. Apr 2008 20:42

Re: Liste mit Zeigern
 
also ist anker einfach ein zeiger auf das erste element der liste. sprich den ersten datensatz an dea der zeiger auf das nächste element verknüpft ist.
Dann habe ich da wohl was falsch verstanden. jetzt ist mir auch klar warum ich immer solche dubiosen Fehlermeldungen hatte. Ich dachte immer ich muss anker^.z was zuordnen, wie jedem späteren Listenelement. Da programmiert man 2 Doppelstunden und fragt sich warum das nicht geht.
Naja danke an alle. Ich denke mit dem wissen sollte es mit ein wenig übung schon funktionieren. :thumb: :hi:

Klaus01 21. Apr 2008 20:46

Re: Liste mit Zeigern
 
Zitat:

Zitat von Damaster
..weiter unten hat Klaus ja list^.naechster:=dummy geschrieben. Wieso geht dann hier nicht anker^.naechster:=pak?

Ich habe da eine gesonderte Variable genommen, weil das Ankerelement nicht mehr verändert werden sollte
wenn es bereits Listenelemente gibt.
Der Anker wird beim ersten Element festgelegt.
Und wenn das letzte Element aus der Liste gelöscht wurde, wird
Anker wieder auf nil gesetzt.

Wenn ich die while Schleife mit Anker gemacht hätte,
wäre die Adresse von Anker verändert worden und der Listenanfang
wäre den Bach hinunter gegangen - die Folge davon sind dann
sogenannte Speicherlecks.

Grüße
Klaus

grenzgaenger 21. Apr 2008 23:32

Re: Liste mit Zeigern
 
Nr. 1: solltest du deine proceduren/methoden mal benennen, damit man weiss was sich bspw. hinter button1 verbirgt.

Nr. 2: anlegen von knoten geht wie folgt:
NewNode := Node.create;
if anker = NULL then Anker.next := NewNode
else
begin
While anker.next <> NIL then ANKER := ANKER.next;
ANKER.next := newNode;
end;


Nr. 3: Löschen geht wie folgt:
temp:= Anker;
While ANKER.Next <> NIL do
begin
Temp := Anker;
ANKER := AnKER.next;
free(temp);
Temp := Anker;
end;
if temp <> NIL then free(anker)

Nr. 3: Traversieren;
Tmp := Anker.next;
While tmp <> NIL and not tmp.content <> content do
tmp := tmp.next;

ansonsten, machst du es deinem PC klar, was du von ihm willst, indem du es ihm kleinigkeit für kleinigkeit erklärst :-)

<HTH>

grenzgaenger 21. Apr 2008 23:34

Re: Liste mit Zeigern
 
[quote="Klaus01"]Ich habe da eine gesonderte Variable genommen, weil das Ankerelement nicht mehr verändert werden sollte/quote]

Anmerkung: der anker darf nicht mehr verändert werden, ausser die liste ist aufgelöst. ansonsten ist der anker untouchable.

<HTH>


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:42 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz