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.