Ich versuche, ein Programm zu schreiben, um eine verkettete Liste ohne Verwendung von Bibliotheken in eine Datei zu serialisieren. Mein Problem ist, wie ich Knoten zur serialisierten Struktur hinzufügen oder entfernen kann, da ich keinen next-Zeiger habe? Wie kann ich auch Fragmentierung vermeiden?
Antwort
Zu viele Anzeigen?Wenn Ihre verkettete Liste keine Schleifen hat, dann ist die Tatsache, dass dies eine "verkettete Liste" ist, ein Speicherdetail, kein Serialisierungsdetail. Schreiben Sie einfach die Knotenwerte in die Datei und bauen Sie die next
-Zeiger beim Deserialisieren.
Wenn Ihre verkettete Liste jedoch Schleifen hat, dann benötigen Sie etwas Intelligenteres. Sie müssen die next
-Zeiger als Dateioffsets zum Knoten (oder etwas Ähnliches) speichern, um die "Verbindung" zu kodieren.
Für jeden Knoten in Ihrer verketteten Liste speichern Sie zwei Wörter. Das erste ist die Daten, das zweite ist der Offset des next
-Knotens. Hier ist eine Illustration der zirkulär verketteten Liste:
+-> 1234 -> 5678 -> 2398 -+
| |
+-------------------------+
0 : 4Bytes: 1234 : int Daten <------------+
4 : 4Bytes: 8 : Offset des nächsten Knotens -+ |
| |
8 : 4Bytes: 5678 : int Daten <----------+ |
12 : 4Bytes: 16 : Offset des nächsten Knotens -+ |
| |
16 : 4Bytes: 2398 : int Daten <----------+ |
20 : 4Bytes: 0 : Offset des nächsten Knotens ---+