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

标签 c++ c unix

<分区>

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

最佳答案

如果您的链表没有循环,那么这是一个“链表”这一事实是内存细节,而不是序列化细节。只需将节点值写入文件并在反序列化时构建 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 ---+

关于c++ - 在序列化方面需要一些帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3090080/

相关文章:

c - 在 C 中暂停除 sleep() 之外的主线程执行

eclipse - 如何将文件格式从 Windows 更改为 Unix

c++ - 在 C++ 中读取多个 .dat 文件

c++ - 如何使用指向结构体 vector 的迭代器 C++?

c - 如何释放主线程函数分配的内存

c - 从 C 程序连接 PostgreSql 需要哪些库?

c++ - 引用静态二维数组?

c++ - x86-64 上检查指针范围是否跨越 N 字节对齐地址的最快方法?

regex - 在 bash 中使用正则表达式组

linux - 如何使 R 脚本从管道和用户给定的参数中获取输入