doppelt verkettete Liste

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
guennid

doppelt verkettete Liste

Beitrag von guennid » 15.06.2008 09:11:49

Es geht um Pascal-Code :oops:

Bringt es einen Vorteil, eine doppelt verkettete Textliste so:

Code: Alles auswählen

TYPE  TextListe = ^TextZeile; 
      TextZeile = RECORD
                    Zeile : ^STRING;
                    Vor, Rueck : TextListe
                  END;
statt so:

Code: Alles auswählen

TYPE  TextListe = ^TextZeile;
      TextZeile = RECORD
                    Zeile : STRING;
                    Vor, Rueck : TextListe
                  END;
zu deklarieren und wenn ja, welchen?

Grüße, Günther

Benutzeravatar
peschmae
Beiträge: 4844
Registriert: 07.01.2003 12:50:33
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: nirgendwo im irgendwo

Re: doppelt verkettete Liste

Beitrag von peschmae » 15.06.2008 15:49:25

Ich bin jetzt auch nicht der Pascal-Guru (meine Delphi-Zeit ist schon zehn Jahre her oder so), aber jetzt mal ganz allgemein...

Der Grundsätzliche Vorteil der ersten Formulierung (mit Pointer) ist dass die Grösse des Pointers immer dieselbe ist. D.h. wenn du schnell durch die Liste durchlaufen willst, ohne den String zu betrachten, dann befindet sich der Vor/Rueck-Pointer im Speicher immer an derselben Stelle relativ zum Anfang des TextZeile-Records gesehen.

Hast du nun statt einem String-Pointer einen ganzen String im Record ist das nicht mehr zwingend gegeben, da ja der String in Pascal eine Variable Länge haben kann. d.h. der Offset zwischen Adresse des TextZeile-Records und dem Vor/Rueck-Pointer ist nicht mehr konstant. d.h. die Sache wird potentiell langsamer, muss doch vor dem Auslesen des nächsten Vor/Rueck-Pointers immer erst dessen Offset von irgendwo her ausgelesen werden.

Am Ende kommts aber einfach nur darauf an wie der Compiler das ganze im Speicher anordnet - ich habe keine Ahnung wieviel Freiheit er da in Pascal hat, bei der Anordnung der Variablen eines RECORDs im Speicher (wenn er z.B. die Pointer vor den String in den Speicher stellt (weil er das darf), dann ist die Frage String vs. Stringpointer irrelevant).

MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy

guennid

Re: doppelt verkettete Liste

Beitrag von guennid » 15.06.2008 20:21:05

Danke sehr!

Das klärt die Sache.

Grüße, Günther

Antworten