我想編寫一個程序來序列化鏈接列表到一個文件,而不使用任何庫。我的問題是如何添加或刪除序列化結構的節點,因爲我沒有下一個指針?另外我怎樣才能避免碎片?需要一些序列化的幫助
回答
如果你的鏈表沒有循環,那麼這是一個「鏈表」的事實是一個內存細節,而不是一個序列化的細節。只需將節點值寫入文件中,並在反序列化時構建next
指針。
但是,如果你的鏈接列表確實有有循環,那麼你需要更聰明的東西。您需要將next
指針作爲文件存儲到節點(或類似的東西)來對「鏈接」進行編碼。
對於鏈表中的每個節點,存儲兩個單詞。第一個是數據,第二個是next
節點的偏移量。這裏是一個循環鏈表的例子:
+-> 1234 -> 5678 -> 2398 -+
| |
+-------------------------+
0 : 4bytes: 1234 : int data <------------+
4 : 4bytes: 8 : offset of next node -+ |
| |
8 : 4bytes: 5678 : int data <----------+ |
12 : 4bytes: 16 : offset of next node -+ |
| |
16 : 4bytes: 2398 : int data <----------+ |
20 : 4bytes: 0 : offset of next node ---+
@mousey:您可以在序列化之前對它們進行排序。通常,您不希望序列化例程修改數據。換句話說,你需要'A ==反序列化(序列化(A))'。如果你開始改變元素的順序,那你就麻煩了。 – Stephen 2010-06-22 03:36:21
@Stephen如果我添加一個新元素需要按排序順序。我是否需要反序列化整個列表以添加新元素? – mousey 2010-06-22 03:42:12
@mousey:可能。但是,通常,每次將元素添加到列表時,都不會序列化(和反序列化)。您通常將其序列化以通過網絡發送,將其存儲在磁盤上等。如果排序屬性(和常量重新編碼)非常重要,那麼您可以選擇其他格式 - 寫入時,總是附加到文件的後面並在閱讀時保持排序。 – Stephen 2010-06-22 03:53:36
- 1. 我需要幫助簡化一些JavaScript
- 2. preg_match_all - 需要一些幫助
- 3. 需要一些幫助SC.SelectView
- 4. 需要一些幫助PVOID
- 5. RegQueryValueEx,需要一些幫助
- 6. 需要一些幫助CasperJS
- 7. 需要一些幫助!
- 8. 需要一些PHP幫助
- 9. Django需要一些幫助
- 10. 需要一些幫助#define
- 11. 貝寶幫手需要一些幫助
- 12. 真的需要WebView的一些幫助
- 13. 需要域模型的一些幫助
- 14. 需要一些基本的github幫助
- 15. 需要一些簡單的JavaScript幫助
- 16. 需要一些尋路的幫助!
- 17. 需要一些關於maven的幫助
- 18. 需要一些x86組件的幫助
- 19. 需要一些XElement查詢的幫助
- 20. 需要一些幫助,爲的DatePicker
- 21. 需要一些String.format的幫助
- 22. 需要JQGrid的一些幫助
- 23. 需要簡單的PHP一些幫助
- 24. 需要一些功能的幫助R
- 25. 需要一些MySQL查詢的幫助
- 26. 需要一些幫助PHP的MySQL
- 27. 需要一些mod_rewrite規則的幫助
- 28. 需要一些幫助,使互動Jtable
- 29. 需要幫助轉動一些數據
- 30. 需要一些貝寶幫助
我想序列化一個鏈表結構。有人可以幫助我如何做到這一點。請不要使用外部庫。序列化應該用於添加節點並刪除文件中的節點。另外如何將結構轉換爲二進制,然後轉換爲鏈表。 (也有「下一個」指針)。也應該以什麼格式存儲它,以便我的文件可以保存多個鏈接列表。 – mousey 2010-06-23 02:50:05
@mousey:我們已經過了這個:)你對我們的討論瞭解多少? – Stephen 2010-06-23 02:53:38
@Stephen我沒有得到存儲它的格式。如果我想存儲一個涉及int數據的鏈表。我是否需要存儲像{int值和下一個結構的文件偏移量那樣的值?)或者如何維護文件中的結構格式 – mousey 2010-06-23 02:56:25