我想编写一个程序来序列化链接列表到一个文件,而不使用任何库。我的问题是如何添加或删除序列化结构的节点,因为我没有下一个指针?另外我怎样才能避免碎片?需要一些序列化的帮助
回答
如果你的链表没有循环,那么这是一个“链表”的事实是一个内存细节,而不是一个序列化的细节。只需将节点值写入文件中,并在反序列化时构建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