二叉树的结构分配

时间:2016-04-23 14:45:02

标签: c

很难在标题中说出我的问题。但是,

我编写了一个使用结构数据库的程序。在这个结构中,我有关于数据库和数据库本身元素的信息。每个元素都是另一个结构。现在,我将元素声明为一个简单的元素数组,其中包含定义的大小。但是每个元素都很重(6个long,一个char [64],一些int,很快就会更多)而且我想让程序能够同时处理很多(可能是infinte)元素,所以它是必须使用大量的RAM。但有时程序会填充数组,所以程序占用了大量的RAM并且只能处理很少的元素。所以我想使用二叉树,所以当我想放置另一个元素时,我初始化一个新的元素结构,当我删除它时,程序dealloc结构,我可以有" infintie"元件。但是我遇到了两个问题:

1)如果我调用一个分配新结构的函数并将指针返回给它,那么结构就不会自动解除分配,因为函数已经完成 2)结构whitout顺序的程序alloc和dealloc元素,所以数组是完美的,因为它需要一个布尔标志" active"或者"不活跃"对于每个结构,但在树中,事情更复杂,我必须删除节点,然后将他的孩子重新链接到另一个没有孩子的节点......

你怎么看?每个建议都是谢谢。

1 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,您希望有很多struct element,其中sizeof(struct element)非常大,并且您希望在程序中动态添加和删除它们。

这意味着您要动态地为它们分配和释放内存,因此您希望使用malloc()free(),并且您将使用struct elem *。现在保持指针的数据结构取决于您将对数据执行的操作。

如果您不需要搜索元素(或者如果您从未在某个点上搜索过很多元素),如果它只是通过它们进行迭代,那么Linked list是合适的。它允许您动态添加和删除元素,并且它具有内存效率。

如果您需要搜索元素,但只使用一个变量,则可以将指针放入binary tree(或hash table)。

否则(如果您需要使用多个变量搜索数据),您应该将它们保存在链表中并构造二叉树或哈希表index以加速搜索经常搜索的变量。

但在那时,您可能会考虑使用一些现有的DBMS。