2016-04-23 111 views
0

在标题中很难说出我的问题。但是,使用二叉树进行结构分配

我正在编程使用结构数据库的程序。在这个结构中,我有关于数据库和数据库本身的信息。每个元素都是另一种结构。现在我宣布这些元素是一个简单的元素阵列,具有定义的大小。但是每个元素都很重(6个double double,一个char [64],一些int并且很快就会更多),我想使程序能够同时处理很多(可能是infinte)元素,所以有必要使用很多内存。但是有时候程序只填满了这个数组,所以程序占用了大量的RAM,并且只能处理很少的元素。所以我认为使用二叉树,所以当我想要把另一个元素,我初始化一个新的元素结构,当我删除它的程序dealloc结构,我可以有“infintie”元素。但有两个问题影响到我:

2)如果我调用一个函数来分配一个新结构并返回指针,那么结构并不会自动释放,因为函数已完成 2)程序alloc和dealloc元素没有秩序的结构,所以数组是完美的,因为每个结构都有足够的布尔标志“active”或“unactive”,但是在树中,事情更复杂,我必须删除节点,然后重新连接他的子节点到另一个没有孩子的节点...

你觉得呢?每一个建议都是谢谢。

回答

0

如果我正确理解你的问题,你想有很多struct element,其中sizeof(struct element)是相当大的,你想要在你的程序中动态添加和删除它们。

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

如果您不需要在元素中搜索(或者如果您从未在一个点上有过很多元素),如果仅仅遍历它们就足够了,Linked list是合适的。它允许您动态地添加和删除元素,并且具有内存高效性。

如果您需要在元素中进行搜索,但只使用一个变量,则可以将指针设置为binary tree(或hash table)。否则(如果您需要使用多个变量在数据中进行搜索),您应该将它们保留在链接列表中,并构建二叉树或散列表index以加速对经常搜索的变量的搜索。

但是在那个时候,你可能会考虑使用一些现有的DBMS。

+0

感谢您的好解释。但是如果我调用一个函数来分配一个变量,当函数返回时,我可以访问它吗? –

+0

是的,如果你做得对。看到我的[其他答案](http://stackoverflow.com/questions/36817825/linked-list-head-not-being-updated-across-function-calls/36817919#36817919)恰好涵盖了这一点 –