Autor Beitrag
McC
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mi 12.03.03 14:26 
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:
ausblenden 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 user profile iconTino: Code-Tags hinzugefügt.
Luncustaf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 324

Win 2k
D7 Ent.
BeitragVerfasst: Mi 12.03.03 14:35 
McC hat folgendes geschrieben:


Die Liste wurde definiert als Klasse, etwa wie folgt:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Mi 12.03.03 14:59 
definitv ohne punkt zwischen inherited und create. der fehler muss woanders liegen. poste doch nochmal mehr code
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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
ausblenden Quelltext
1:
2:
3:
type 
TDoubleLinkedList = class; 
constructor create;  override; <<<----

heißen ?

Mfg Frank

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
McC Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Mi 12.03.03 19:59 
override geht nicht, "can not override a stattic method" oder sowas.

Der code sieht genau wie folgt aus:
ausblenden 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 user profile iconTino: Code-Tags hinzugefügt.
Keldorn
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
McC Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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:
ausblenden Quelltext
1:
2:
3:
var Messwerte: TDoubleLinkedList;
begin
  Messwerte.Create;


Moderiert von user profile iconTino: Code-Tags hinzugefügt.
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 2266
Erhaltene Danke: 4

Vista
D6 Prof, D 2005 Pro, D2007 Pro, DelphiXE2 Pro
BeitragVerfasst: 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
ausblenden 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

_________________
Lükes Grundlage der Programmierung: Es wird nicht funktionieren.
(Murphy)
McC Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Do 13.03.03 11:23 
Zitat:

dir ist aber klar , daß es
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 896

Win XP, Suse 8.1
Delphi 4/7/8 alles prof
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: 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!