Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Verkettete Liste als Baum in Txtdatei abspeichern

  Alt 15. Dez 2005, 22:00
Hmm.... Lass mich mal ausholen..
Erstmal: Abspeichern und Einlesen sollte schnell gehen. Also ohne vorher die Einfügeposition suchen zu müssen.
Daraus folgt: Jede Liste sollte so abgespeichert werden, wie sie eben vorliegt. Damit kann man sie 1:1 genauso wieder einlesen.
Daraus folgt aber auch: Jede Liste wird nacheinander abgespeichert.
Ich würde es so machen:

Jede Liste speichert die Elemente hintereinander und dann zum Schluss ein 'Listenende'
Damit kann man das Abspeichern (in Pseudocode) so implementieren:
Code:
Foreach L in ListsToSave Do
  e := L.First;
  While e<>nil do begin
    WriteToFile (e.Contents);
    e := e.NextElement;
  End;
  WriteToFile (<EndOfList>);
  End;
Und das Einlesen so;
Code:
While not EndOfFile Do begin
  L := NewList;
  Repeat
    E := ReadElement;
    If E = EndOfList Then
      Break
    Else
      L.Add (E); // Ans Ende der Liste anhängen
  Until Weihnachten=Ostern; // Hö Hö
End;
Das ist optimal schnell aber es geht einfacher:
Wozu verkettete Listen, wenn es die gute alte TStringList gibt. Auch wenn sie nicht optimal schnell ist, sollte das im Jahre 2005 egal sein, zumal sie bis 20000 Elemente durchaus schnell genug ist (solange man
MyList.Sorted := True setzt. Dann ist das Suchen ordendlich.

Noch ein Tipp: Du hast einen Kunden. Warum, meinst du, bieten die meisten Software-Buden auch 'IT-Consulting' an, also Beratung? Weil die Forderung deines Kunden (wenn er den kein Prof ist ) eine verkettete Liste zu verwenden, auf durchaus kostenpflichtigen Beratungsbedarf (des Kunden) schliessen lässt. Will sagen: Manchmal muss man den Kunden zu seinem Glück *zwingen*

Tipp: Stringlisten.
Und dann so programmieren, das man die Stringlisten -wenns geht- einfach durch noch geeignetere Strukturen ersetzen kann.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat