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

时间:2010-06-22 03:27:07

标签: c++ c unix

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

1 个答案:

答案 0 :(得分: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 ---+