Entwickler-Ecke
Algorithmen, Optimierung und Assembler - komplexe pointer struktur mit delphi
phat1 - Di 16.05.06 12:24
Titel: komplexe pointer struktur mit delphi
hallo,
ich benötige für eine anwendung eine sehr komplexe pointerstruktur. Jeder kennt das beispiel wo man mit einem pointer über einen record immer den nächsten bzw. den vorherigen datensatz eines pointers referenzieren kann... also sozusagen eine pointerkette. Ähnlich soll das auch mit meinem benötigten pointer machbar sein jedoch soll nach und nach jedem pointer beliebig viele nachgelagerte und vorgelagerte elemente zugewiesen werden. Die frage ist nun wie kann ich das realisieren???
Die variante, in einem pointer record einen großen array bereitzuhalten ist nicht ausreichend, da dies ja statisch wäre und nicht beliebig erweitert werden könnte. ausserem speichertechnisch sehr uneffizient.
Die frage ist also gibt es eine möglichkeit in delphi die pointer records (für jeden pointer einzelnd) dynamisch zu erweitern? oder gibt es eine andere möglichkeit solch eine struktur zu erhalten.
Die einzige idee, die ich noch hätte wäre einen pointerbaum nach unten größer werden zu lassen also neue ebenen hinzuzufügen. aber bei vielen zugewiesenen "nachfolgern" wird diese struktur auch riesig und sicherlich nicht sehr effizient... oder sollte man da keine bedenken haben?
ich weiss.. wahrscheinlich will ich zu viel aber evtl. gibts da ja doch ne intelligente lösung...;-)
vielen dank schonmal!
gruß jakob
PS: Hoffe das was die richtige rubrik dafür;-)
BenBE - Di 16.05.06 12:33
1. Wozu gibt's dynamische Arrays? Der Overhead ist dabei nur 16+n*4Bytes je Array ...
2. Wozu brauchst Du ds?
phat1 - Di 16.05.06 12:39
sorry meine programmierskills sind schon ein wenig eingerostet ;-) was bedeutet denn 16+n*4 bytes im klartext? hast du n link wo ich was über dynamische arrays rausfinde - hört sich sehr interessant an.
grob gesagt soll damit eine KI programmiert werden. eine art chatbot. ist aber zunächst nur ne testvariante...
BenBE - Di 16.05.06 13:01
16+n*4Byte heißt nur, dass ein dynamisches Array mit n Einträgen die besagte Größe besitzt ... (zzgl. der Speicherblockgrößenrundung des MM, die aber zu vernachlässigen geht ...
Informationen zu dynamischen Arrays findest Du in der DOH im Abschnitt Object Pascal Syntax.
phat1 - Di 16.05.06 13:10
so wie ich das gerade verstanden habe muss man aber bei dynamischen arrays auch in vorraus den speicherplatz reservieren. D.h. das ich wenn ich einen array mit bspsw. n=10 habe und dann einen hinzufügen möchte geht das nur, indem ich einen neuen array mit neuer speicherplatzreservierung (n=11) erzeuge und die einträge des "alten" arrays übertrage... ist zwar machbar aber n bisschen umständlich finde ich.. oder geht das auch einfacher?
thx.
BenBE - Di 16.05.06 13:22
Siehe SetLength, damit kannst Du die Größe nachträglich anpassen ...
phat1 - Di 16.05.06 13:31
alles klar damit sollte es gehen... thx
ein anderes problem denke ich is das sicherlich die array größe im record des pointers generell (also für alle pointer elemente) geändert wird. d.h. das alle immer die größe des längesten arrays reservieren. kann sein das ich mich mit meiner vermutung irre aber befürchte das das wohl so sein könnte.
Wie benutzt man dabei Setlegth überhaupt in z.B. folgender struktur?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| type PMyElement = ^TMyElement; TMyArray : array of PMyElement; TMyElement = record wert : integer; nach : TMyArray; end; var a : TMyElement; begin SetLength(???, 100);
end; |
phat1 - Di 16.05.06 14:00
ich habs!!!:-)
ich mach einfach anstatt des arrays eine zweite lineare pointerliste und dann kann ich ja beliebig anfügen entfernen etc... das ich da nicht früher drauf gekommen bin...
auf jeden fall vielen dank BenBE für die idee mit dem array... hat mich dann am ende ja doch zur lösung geführt ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!