AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

verkettete Listen

Ein Thema von Gerkey · begonnen am 18. Apr 2018 · letzter Beitrag vom 20. Apr 2018
Antwort Antwort
Seite 3 von 3     123   
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#21

AW: verkettete Listen

  Alt 19. Apr 2018, 18:51
Auch wenn das etwas fortgeschritten ist, kannst Du mal ein Beispiel posten?
Was genau willst denn wissen?
Erst einmal vollkommen ohne Virtualxxxx. Dein (?) Ansatz ist ja eine Pointer-Verküpfung (und eine zweite und eine dritte...) in der in jedem Eintrag (Node?) ein pointer auf Daten enthalten ist. Aber wie sind die Daten organisiert? Einfach verpointerte Liste oder Array oder ? Oder liegen die wild im Speicher herum und wenn die Organisationslisten weg sind hast du Datenzombies?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#22

AW: verkettete Listen

  Alt 19. Apr 2018, 20:36
Die gehen aber offensichtlich davon aus, dass man das Element erst noch suchen muss. Das ist ein bisschen unfair der verketteten Liste gegenüber. Denn an sich geht das Einfügen oder Löschen eines Elements in einer verketteten Liste – wenn man den Pointer schon hat – in konstanter Zeit, weil man ja nur zwei Pointer umbiegen muss. Beim Array dagegen muss man immer alle Elemente nach dem gelöschten bzw. eingefügten Element umkopieren, was mit der Anzahl der Elemente linear ansteigt. Gerade da spielt die verkettete Liste ja ihre Stärke aus. Das ist normalerweise genau der Grund, warum man sich für eine verkettete Liste entscheidet.

Bei sehr kleinen Listen (so in der Größenordnung <100 Elemente) ist allerdings das Array oft trotzdem schneller. Es kommt natürlich auch immer darauf an, ob man mehr liest oder mehr schreibt. Wenn man fast nur liest, dann kann das Array auch bei größeren Listen Sinn machen.
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#23

AW: verkettete Listen

  Alt 19. Apr 2018, 20:40
Auch wenn das etwas fortgeschritten ist, kannst Du mal ein Beispiel posten?
Was genau willst denn wissen?
Erst einmal vollkommen ohne Virtualxxxx. Dein (?) Ansatz ist ja eine Pointer-Verküpfung (und eine zweite und eine dritte...) in der in jedem Eintrag (Node?) ein pointer auf Daten enthalten ist. Aber wie sind die Daten organisiert? Einfach verpointerte Liste oder Array oder ? Oder liegen die wild im Speicher herum und wenn die Organisationslisten weg sind hast du Datenzombies?
Im Wesentlichen packe ich die Nutzdaten als Payload gleich mit in den Record. Der Record wird mit New() und Dispose() bzw. Initialize() und Finalize() erstellt und zerstört. Seit man Records auch noch Prozeduren anfügen kann, implementiere ich die ganze Verknüpfungslogik direkt im Record. Wenn man es richtig anstellt, stupst man nur das Rootelement an und das Ganze schreibt sich z.B. selbst in einen Stream zwecks Sicherung auf Festspeicher.

Willst du mittendrin ein Element löschen, dann lässt du dieses Element alle Verweise auf sich selbst in anderen Elementen auf das jeweils nächste Nachbarelement ändern. Das geht, wenn jedes Element seine Nachbarn "persönlich" kennt.

Du könntest wenn du viel Wert auf Integrität legst, einen Zeiger auf jeden Record in eine TList schreiben, um sie dann in einem Destructor abzuarbeiten und freizugeben. Aktiv arbeiten würde ich aber mit der TList nicht.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#24

AW: verkettete Listen

  Alt 20. Apr 2018, 09:03
Ah so, vielen Dank!
das halte ich mal im Hinterkopf

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#25

AW: verkettete Listen

  Alt 20. Apr 2018, 14:40
Die gehen aber offensichtlich davon aus, dass man das Element erst noch suchen muss. Das ist ein bisschen unfair der verketteten Liste gegenüber. Denn an sich geht das Einfügen oder Löschen eines Elements in einer verketteten Liste – wenn man den Pointer schon hat – in konstanter Zeit, weil man ja nur zwei Pointer umbiegen muss. Beim Array dagegen muss man immer alle Elemente nach dem gelöschten bzw. eingefügten Element umkopieren, was mit der Anzahl der Elemente linear ansteigt. Gerade da spielt die verkettete Liste ja ihre Stärke aus. Das ist normalerweise genau der Grund, warum man sich für eine verkettete Liste entscheidet.
Das häufige Anfordern und Freigeben von vielen kleinen Speicherblöcken kann durchaus langsamer sein, als die einmalige Anforderung eines einzelnen (oder wenigen) großen Blocks. std::vector over-allocated z.B. anhand bestimmter Growth-Faktoren. Bei einer linked-list wäre das nur möglich, wenn man alle Nodes im selben Speicher hält, wofür man dann aber wiederrum z.B. ein extra Bitmap benötigt, um die freien Bereiche zu Tracken (habe ich deshalb noch in kaum bzw. sogar in keiner Implementation gesehen). Kann also schon sein, dass das Verschieben des Speichers performanter ist. Denke das muss man alles individuell auf den Anwendungsfall bezogen testen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz