在序列化方面需要一些帮助

mou*_*sey 4 c c++ unix

我正在尝试编写一个程序,以便在不使用任何库的情况下将链接列表序列化到文件中.我的问题是如何添加或删除序列结构的节点,因为我没有下一个指针?另外我怎么能避免碎片?

Ste*_*hen 5

如果链接列表没有循环,那么这是一个"链接列表"的事实是内存细节,而不是序列化细节.只需将节点值写入文件并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 ---+
Run Code Online (Sandbox Code Playgroud)

  • @mousey:您可以在序列化之前对它们进行排序.通常,您不希望序列化例程修改数据.换句话说,你想要'A == Deserialize(Serialize(A))`.如果你开始改变元素的顺序,那你就麻烦了. (3认同)