【发布时间】:2018-02-03 03:47:06
【问题描述】:
我知道这听起来很奇怪,但就是这样。我有一个数据结构,它基本上是一个修改过的 AVL 树。该结构的每个节点都有一个左孩子和一个右孩子。这些核心指针(左和右)将用于将所有数据节点链接在一起并保持数据结构平衡(AVL 旋转)以改进搜索。但这些不是结构中唯一的指针,还有其他指针可以指向树中的任何随机节点(这创建了类似图形的类比)。
树是在运行时通过用户交互 (CLI) 构建的。用户还负责在节点之间创建所有不同的链接。
这种数据结构的一个例子可能是(还没有开始编码,它只是原型):
struct node {
struct node *left;
struct node *right
struct node *links[NUM]; // Points to any random node in the tree.
/* Probably many other fields here that could be either pointers
or other data types */
}
现在,一切都在 RAM 中。一旦用户想要退出,所有的数据节点(整棵树)都应该以二进制模式保存到一个文件中(为了以后重新加载,所以必须考虑到这一点)。
基本上,使用递归树遍历算法来保存 AVL 树很容易(在这种情况下,问题是重复的,因为SO 中已经存在解决方案)。但是,就我而言,我必须保留节点之间任意创建的所有链接。
什么是时间和空间上最有效的方式?
【问题讨论】:
-
我建议您尝试找到某种可以处理包括指针在内的任意数据的序列化库。尝试自己为这种复杂的数据结构编写序列化通常需要大量工作并且容易出现非常糟糕的错误。
-
@Someprogrammerdude 这是一个很好的提议,从来没想过,哈哈。你知道任何开源 C 库吗?
标签: c algorithm serialization tree