LinkedLists und Pointer
Verfasst: 07.02.2005 18:03
Folgendes Codebeispiel: Ich erzeuge mir 4 Knoten in einer Knotenliste und lasse mir die Adressen der Listenelemente ausgeben. Danach entferne ich einige Knoten am Anfang und am Ende der Liste und füge neue hinzu und schaue mir wieder die Adressen an:
Die zwei Node(0;4) und Node(4;4) vom Anfang sind zwar jetzt auf einer anderen Listenposition, haben aber noch die gleichen Adresse. Meine Frage: ist dies nur zufällig so, weil ich hier nur sehr geringe Datenmengen im Speicher erzeuge oder bleiben Listenelemente generell an der Speicheradresse, an der sie erzeugt wurden? Anders gefragt: Können sich Listenelemente zur Laufzeit im Speicher dynamisch bewegen, wenn ich zum Beispiel einen großen Speicherbereich allociere oder sonstige Speicheraktionen durchführe?
Ich hoffe ich konnte mich verständlich ausdrücken
Code: Alles auswählen
Structure node
posx.l
posy.l
EndStructure
NewList node.node()
Procedure CreateNode(x, y)
AddElement(node())
node()\posx = x
node()\posy = y
EndProcedure
;4 Knoten erzeugen
CreateNode(0,0)
CreateNode(4,0)
CreateNode(0,4)
CreateNode(4,4)
;Knoten ausgeben
ForEach node()
Debug Str(@node()) + " (" + Str(ListIndex(node())) + ") " + Str(node()\posx) + ";" + Str(node()\posy)
Next
;Knoten löschen und hinzufügen
Debug "----------"
FirstElement(node()): DeleteElement(node())
FirstElement(node()): DeleteElement(node())
FirstElement(node()): CreateNode(20,30)
LastElement(node()): CreateNode(40,99)
LastElement(node()): CreateNode(60,60)
;Knoten ausgeben
ForEach node()
Debug Str(@node()) + " (" + Str(ListIndex(node())) + ") " + Str(node()\posx) + ";" + Str(node()\posy)
NextIch hoffe ich konnte mich verständlich ausdrücken