![]() |
template verkettete liste
hallo, moechte gern so eine template verkettete liste bauen, fuer allgemeine datentyp
Code:
wie kann ich jez z.B string, integer wert an value zuweisen, da value von TObject is.
PList = ^TList;
vList = record; value : TObject; pNextItem: PList; pLastItem: PList; end; TList = vList; bzw, wie lese ich den wert in string, integer aus um andere variable zuzuweisen.
Code:
oder is konzept mit dem datentyp TObject ueberhaupt falsch, wenn ja, was soll man stattdessen nehmen
data: vList;
i : integer; data.value := 3; // so? i := data.value; // wie soll hier richtig sein thx, thx |
Re: template verkettete liste
Im Prinzip passt das so, aber ich würde als Bezeichner nicht TList verwenden,
denn so heißt schon eine Klasse in Delphi ;) |
Re: template verkettete liste
Erstens das und zweitens müsste Value dann eine Klasse sein (oder sich zumindest als solche ausgeben).
|
Re: template verkettete liste
Ich würde Value entweder als Pointer deklarieren, oder gleich alles mit Objekten lösen. Objekte sind ja im Grunde auch Pointer, bieten aber einen größeren Komfort und sind lesbarer.
Edit: Außerdem kannst du bei einer objektorientierten Lösung von deiner Basisklasse typensichere Listen ableiten. |
Re: template verkettete liste
kann jemand bitte ein kleines beispiel code zeigen?
sag viel mehr aus als worte |
Re: template verkettete liste
Wenn es eine allgemein zu nutzende doppelt verkettete Liste sein soll:
Delphi-Quellcode:
type
PElement = ^TElement; TElement = record Data: Pointer; //hier die Nutzerdaten Prior, //Vorgänger in der Liste Next: PElement; //Nachfolger in der Liste end; |
Re: template verkettete liste
danke sehr fuer die beispielcode, wenn ich die kette wieder freigeben will, reicht einfach erste daten zu loeschen?
oder muss ich alle hintereinander loeschen |
Re: template verkettete liste
Zitat:
|
Re: template verkettete liste
Garbage Collector?
Sieht mir eher nach normalem Delphi(32) aus. |
Re: template verkettete liste
|
Re: template verkettete liste
Du musst himi wahrscheinlich nicht die Funktionsweise eines GCs erklären. Eher deine Idee, dass es sowas unter Delphi.Win32 gäbe :gruebel: .
|
Re: template verkettete liste
Zitat:
im moment sieht mein code folgendes aus
Delphi-Quellcode:
folgende fehler spuckt der aus
PList = ^vList;
vList = record nCount : Cardinal; // number of datas pItem : Pointer; // data pointer pNextItem : PList; // next item pLastItem : PList; // previous item end; vArray = class m_list : vList; public constructor Create(pValue: Pointer); destructor Destroy; override; end; constructor ZArray.Create(pValue: Pointer); var p : Pointer; begin if Assigned(pValue) then begin with Self do begin m_list.nCount := 1; New(m_list.pItem); m_list.pItem^ := pValue^; // hier soll der fehler sein m_list.pNextItem := nil; m_list.pLastItem := nil; end end; end; Zitat:
|
Re: template verkettete liste
Wo den?
Also in welcher Zeile? |
Re: template verkettete liste
Ich steig da nicht mehr durch: PList, ZList, vList, m_list, was ist was? Mir scheint, da ist die Zuordnung durcheinander geraten.
|
Re: template verkettete liste
Zitat:
Delphi-Quellcode:
heißen.
m_list.pItem := pValue;
Und ein with self bewirkt nicht wirklich viel ;) . |
Re: template verkettete liste
ein tippfehler war mir unterlaufen, ich hab es nun geaendert.
Delphi-Quellcode:
PList = ^vList;
vList = record nCount : Cardinal; // number of datas pItem : Pointer; // data pointer pNextItem : PList; // next item pLastItem : PList; // previous item end; vArray = class m_list : vList; public constructor Create(pValue: Pointer); destructor Destroy; override; end; constructor ZArray.Create(pValue: Pointer); var p : Pointer; begin if Assigned(pValue) then begin with Self do begin m_list.nCount := 1; New(m_list.pItem); m_list.pItem^ := pValue^; // hier soll der fehler sein m_list.pNextItem := nil; m_list.pLastItem := nil; end end; end; Zitat:
|
Re: template verkettete liste
Zitat:
Zitat:
Zitat:
|
Re: template verkettete liste
Zitat:
ich muss damit wohl leben, was delphi zu bieten hat |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 Uhr. |
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