Entwickler-Ecke
Sonstiges (Delphi) - Double Linked List
McC - Mi 12.03.03 14:26
Titel: Double Linked List
Hi Leute,
ich hab jetzt ein paar Einträge aus Google weiterverfolgt, die sich mit der Implementation einer Double Linked List beschäftigen, die waren aber alle
mist.
Hat einer von Euch vielleicht ne Idee wie man sowas sauber implementiert? Unter Java is das sooo einfach, mit Delphi kanns dann doch nicht so verflixt kompliziert sein......
Das Problem, das ich bei den meisten Sachen hatte, die ich probiert hab, war folgendes:
Die Liste wurde definiert als Klasse, etwa wie folgt:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| type TDoubleLinkedList = class; [variablen etc] constructor create; [sonstiger kram halt] end;
[blabla]
implementation
constructor TDoubleLinkedList.create; begin inherited create; [initialisierungen] end;
[...] |
Sobald ich aber das .create aufrufe, gibt's einen Speicherzugriffsfehler in der Zeile mit dem "inherited". Weiss jemand woran das liegen kann??
Danke schon mal für eure Antworten
Moderiert von
Tino: Code-Tags hinzugefügt.
Luncustaf - Mi 12.03.03 14:35
Titel: Re: Double Linked List
| McC hat folgendes geschrieben: |
Die Liste wurde definiert als Klasse, etwa wie folgt:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| type TDoubleLinkedList = class; [variablen etc] constructor create; [sonstiger kram halt] end;
[blabla]
implementation
constructor TDoubleLinkedList.create; begin inherited.create; [initialisierungen] end;
[...] |
|
punkt zwischen inherited und create ?
gr€€tz
CenBells - Mi 12.03.03 14:59
definitv ohne punkt zwischen inherited und create. der fehler muss woanders liegen. poste doch nochmal mehr code
Keldorn - Mi 12.03.03 15:23
| CenBells hat folgendes geschrieben: |
| definitv ohne punkt zwischen inherited und create. der fehler muss woanders liegen. poste doch nochmal mehr code |
stimme ich zu.
ist die liste von einer anderen Liste abgeleitet?
muß es aber auch nicht
Quelltext
1: 2: 3:
| type TDoubleLinkedList = class; constructor create; override; <<<---- |
heißen ?
Mfg Frank
McC - Mi 12.03.03 19:59
override geht nicht, "can not override a stattic method" oder sowas.
Der code sieht genau wie folgt aus:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| [...]
type Pnode = ^Tnode; Tnode = record next, prev: pnode; value: integer; end;
PLinkedList = ^TLinkedList; TLinkedList = class first, last: pnode; count: integer; constructor create; end;
implementation
uses Sysutils;
Constructor TLinkedList.Create; begin inherited create; end;
[...] |
Moderiert von
Tino: Code-Tags hinzugefügt.
Keldorn - Mi 12.03.03 22:15
ok und wie sieht dein restlicher Code aus, dort wo du die liste erzeugst und wie fügst du die nodes hinzu?
Warum willst so eine Liste eigentlich? hast du dir schon mal die normale TList oder Tobjektlist von Delphi angeschaut?
Mfg Frank
McC - Mi 12.03.03 22:41
Hm, wenns nach mir ginge würde ich ein Array verwenden, aber die Aufgabenstellung erfordert ausdrücklich ne Double Linked List. :roll:
Der Teil zum Erstellen einer neuen Instanz von TDoubleLinkedList sieht so aus:
Quelltext
1: 2: 3:
| var Messwerte: TDoubleLinkedList; begin Messwerte.Create; |
Moderiert von
Tino: Code-Tags hinzugefügt.
CenBells - Mi 12.03.03 22:57
poste dochmal genau den code deiner gesamten implemetierung der tdoublelinked list.
Auf einmal bist du nun bei zeigern auf deine liste.
also grundsätlzich, brauchst du du plinkedlist wohl nicht. und lass doch mal den aufruf inherited create in deinem code weg, dann kann es schon laufen. du initialisierst in deinem constructor
first und last aber mit nil, und count mmit 0, oder?
Gruß
Ken
Keldorn - Do 13.03.03 09:22
| McC hat folgendes geschrieben: |
Der Teil zum Erstellen einer neuen Instanz von TDoubleLinkedList sieht so aus:
...
var Messwerte: TDoubleLinkedList;
begin
Messwerte.Create;
... |
dir ist aber klar , daß es
Quelltext
1:
| messwerte:=TDoublelinkedlist.create |
lauten muß?
tip mal
Konstruktoren in der Oh ein und lies dir mal durch, was dort steht.
und Codetags in deinen Beiträgen können auch nicht schaden :wink:
Mfg Frank
McC - Do 13.03.03 11:23
| Zitat: |
dir ist aber klar , daß es
Quelltext 1:
| messwerte:=TDoublelinkedlist.create |
lauten muß?
Mfg Frank |
*Hüstel* ehm, naja, also eigentlich ja
schon aber wie das halt immer so ist, nich wahr?? :roll:
DANKE jedenfalls, genau das war's...
maximus - Do 13.03.03 12:01
| McC hat folgendes geschrieben: |
| Hm, wenns nach mir ginge würde ich ein Array verwenden, aber die Aufgabenstellung erfordert ausdrücklich ne Double Linked List. :roll: ... |
Du kannst es zwar nicht mit einem array machen, aber warum machst du die double linked list nicht mit records? Wenn ich das richtig sehe, dann ist eine linked list nur verkettete records (oder was auch immer), in denen ein pointer jeweils auf das nächste record zeigt. Bei einer bouble linked list zeig dann einfach ein weiterer pointer auf das vorhergehende record. Oder seh ich das falsch?
Mit objekten kann man natürlich die service routinen direkt in der liste implementieren, dafür ist der overhead aber recht gross.
mfg maximus.
McC - Do 13.03.03 15:00
du brauchst ja einen first und ein last pointer, und eben die Methoden zum Einfügen, suchen, löschen etc, da macht ne Klasse auf jeden Fall Sinn
maximus - Do 13.03.03 18:15
Da ich OOP verfechter bin, schliesse ich mich dir an...ich fühlte mich nur an alte zeiten erinnert (das zeitalter des extended-modes), da haben wir das mit records gemacht...hat prima funktioniert.
McC - Fr 14.03.03 00:10
Ich kann mich auch an Zeiten erinnern, da ich mit Basic nicht-enden-wollende Spaghetti codes geschrieben habe, die nur durch das limit von 64 kb oder wieviel das war Quellcodelimit beendet wurden; und die tolle Notlösung, einen Teil des Codes aus einer Textdatei in eine neue Quellcodedatei zu kopieren und diese aus dem Hauptprogramm aufzurufen - hach, das waren noch Zeiten :wink:
HeLe - So 16.03.03 20:52
| Zitat: |
| PLinkedList = ^TLinkedList; |
ist übrigens unnötig, da in Delphi genau wie in Java Objektvariablen grundsätzlich Referenzen sind.
Ich kann in deinem Code aber beim besten Willen keinen Fehler finden, poste mal noch mehr!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!