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