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 1 von 2  1 2      
Gerkey

Registriert seit: 18. Okt 2016
Ort: Bad Kreuznach
55 Beiträge
 
Delphi XE Professional
 
#1

AW: verkettete Listen

  Alt 19. Apr 2018, 07:50
Hab's ja selbst versucht mit folgendem Beispiel aus (Hanser Verlag) Borland Delphi 7 Beispiel von Seite 728:
type
PKnoten = ^TKnoten;
TKNoten = record;
Nr : Integer;
Inhalt : String;
Next: PKnoten;
end;

private
public
end;
...

Nach Start kommt folgende Fehlermeldung: Feld M.Inhalt besitzt keine entsprechende Komponente ! Soll die Deklaration entfernt werden ?
Wo liegt der Haken ?
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
982 Beiträge
 
Delphi 6 Professional
 
#2

AW: verkettete Listen

  Alt 19. Apr 2018, 08:08
Hmm..

Delphi-Quellcode:
type
  PKnoten = ^TKnoten;
  TKNoten = record;
    Nr : Integer;
    Inhalt : String;
    Next: PKnoten;
  end;

private
public
end;
...
Könnte dies an dem Tippfehler liegen : TKNoten = record;
Hier ist ein ';' zu viel
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#3

AW: verkettete Listen

  Alt 19. Apr 2018, 08:21
Also ich arbeite recht oft mit verketteten Listen, wobei ich das eher verkettete Zeiger nennen würde. Das kommt in der Tat duch VirtualTreeView. Dort kann man, wenn man die Funktionsweise erst einmal kapiert hat, Baumstrukturen mit einer Million Knoten in Sekundenbruchteilen aufbauen. Mach das mal mit einem TTreeView

Aber auch die nachgelagerten Daten verkette ich ganz gerne über Zeiger auf Records. So kann ich die selben Daten in mehreren Bäumen bzw. Grids verwenden. Mein Projekt FMC macht das beispielsweise.
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
 
#4

AW: verkettete Listen

  Alt 19. Apr 2018, 08:41
[OT]
So kann ich die selben Daten in mehreren Bäumen bzw. Grids verwenden.
Auch wenn das etwas fortgeschritten ist, kannst Du mal ein Beispiel posten?
[/OT]

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

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#5

AW: verkettete Listen

  Alt 19. Apr 2018, 09:15
Auch wenn das etwas fortgeschritten ist, kannst Du mal ein Beispiel posten?
Was genau willst denn wissen? Die Verkettung als solches ist ja einfach (Pointer-Element im Record, z.B. "ParentNode", "FirstChild", "NextSibling" - geht also über die Implementierung in TVirtualNode hinaus), die Verwendung von einmal reserviertem Speicher in mehreren VirtualTrees ist dann fallspezifisch. Beim oben erwähnten Projekt FMC sind die einzelnen Radiostationen eigentlich Childnodes im linken Tree. Dort werden sie jedoch ausgeblendet und stattdessen im rechten Grid, was ja auch ein verkappter VirtualTree ist, angezeigt.
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 Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.045 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: verkettete Listen

  Alt 19. Apr 2018, 10:06
Newsflash: Performance of Array vs. Linked-List on Modern Computers
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#7

AW: verkettete Listen

  Alt 19. Apr 2018, 10:17
Wie schon gesagt, das ist immer fallspezifisch. Ich wüsste keine sinnvolle Methode, hierarchische Strukturen in einem Array abzubilden ohne genau das künstlich zu erzeugen, was man eigentlich dadurch vermeiden will: Wildes Gespringe im Speicher. Obendrein hast du bei Arrays nur sehr starre Strukturen. Willst da mittendrin ein Element einfügen, verschiebst du den halben Ozean um einen Eimer Wasser einzufügen ^^
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
Namenloser

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

AW: verkettete Listen

  Alt 19. Apr 2018, 19: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 p80286
p80286

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

AW: verkettete Listen

  Alt 19. Apr 2018, 17: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
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.284 Beiträge
 
Delphi 12 Athens
 
#10

AW: verkettete Listen

  Alt 19. Apr 2018, 19: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
Antwort Antwort
Seite 1 von 2  1 2      


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 17:07 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