![]() |
Re: TList = verkettete Liste ?
Zitat:
P.S.: alles Richtung Array scheidet aus. |
Re: TList = verkettete Liste ?
Zitat:
|
Re: TList = verkettete Liste ?
Zitat:
Bei dynamischen Arrays muß hingegen ein durchgehender Speicherblock "gefunden" und dann alles kopiert werden, was je nach Listengröße auch gar nicht machbar ist. Das wird zwar durch intelligente Memory-Manager und Alloziierung von größeren Blöcken gemindert, hat aber immer noch eine viel größere Laufzeit. Was besser ist, dynamische Arrays oder "echte" Listen, hängt ganz vom Einsatzzweck ab und davon ob man viele Einfügeoperationen (besser Listen) oder viele Zugriffe hat (besser dynamische Arrays). Implementierungen von echten Listen, Bäumen usw. gibt es bei ![]() Ich dachte die JCL hätte sowas auch, habe aber dort nichts gefunden. |
Re: TList = verkettete Liste ?
Wie bitte?
Zitat:
Zitat:
Wenn das framework team von Delphi keine zeiger-basierten Stacks und Queues implementiert hat, dann deshalb, weil die wissen, dass die beiden Implementierungen (zeiger vs array) funktional gleichwertig sind - die trade-offs sind ja schon beschrieben worden. Wer kann, der trifft im Einzelfall eine qualifizierte Entscheidung, alle anderen benutzen die mitgelieferten Komponenten und fahren im Regelfall nicht schlecht damit. Freundliche Grüße vom marabu |
Re: TList = verkettete Liste ? [erledigt]
Erledigt deshalb : erstens nützt es nichts lange rumzulamentieren wegen ca. 20-50 Zeilen. Die Listen (habe doppelt verkettete verwendet) sind total flexibel, komme was wolle. 8)
Allerdins eines noch : Zitat:
Zitat:
|
Re: TList = verkettete Liste ? [erledigt]
Natürlich gibts das nicht, warum auch? In einem Array macht sowas keinen Sinn.
|
Re: TList = verkettete Liste ? [erledigt]
Dann soll Robert_G mal bessere Antworten geben. Bei : :wall: denkt man, etwas übersehen zu haben ! Direktzugriff auf das Ding brauche ich keinen, sondern nur die Nachbarknoten. Also ist TList sowieso unbrauchbar.
|
Re: TList = verkettete Liste ? [erledigt]
Ach Hansa... :roll:
|
Re: TList = verkettete Liste ?
Zitat:
Delphi-Quellcode:
Das heißt, ich gebe keinen Index an, sondern das Element nachdem ich einfügen will. Daher habe ich O(1).
NewElement := New(Element);
Insert(AtElement, NewElement) begin AtElement.Next.Prev := NewElement; AtElement.Next := NewElement; end; Wenn man mit Indexen arbeitet (wahlfreier Zugriff) sind Listen nicht geeignet, aber häufig geht man von Anfang zum Ende einer Liste per next-Pointer. Der Algorithmus darf natürlich nicht, wie in Delphi üblich, mit Indexen funktionieren, sondern mit Pointern, sonst ergibt sich O(i) weil man i Elementen folgen muß um an die i-te Stelle zu gelangen und dort die Pointer auf das neue Element zeigen zu lassen. Zitat:
Zitat:
@Hansa: wie sieht es mit dem Link aus? |
Re: TList = verkettete Liste ? [erledigt]
Das Kopieren von dyn. Arrays lässt sich durch Containerklassen (wie zum Beispiel Tist) minimieren, aber es bleibt trotzdem bestehen.
Ich muss mich jetzt mal als ein Fan von Liten outen. Es ist ungemein praktisch wenn ich einfach hinter Element X einen neuen Knoten einfügen kann, ohne dass sich für die anderen Knoten etwas ändert. Wenn man sowieso nur durch den Container iterieren will, ist das eine elegante, feine Lösung. ;) Es gibt auch modernere Ansätze wie die Skiplist. Ddurch kann man ehr schnell in so einem Container suchen, bzw. sortiert einfügen. :) @mael Schnieke Iterierung für Listen ist ab D2005 durch for in möglich. ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:05 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