很难在标题中说出我的问题。但是,
我编写了一个使用结构数据库的程序。在这个结构中,我有关于数据库和数据库本身元素的信息。每个元素都是另一个结构。现在,我将元素声明为一个简单的元素数组,其中包含定义的大小。但是每个元素都很重(6个long,一个char [64],一些int,很快就会更多)而且我想让程序能够同时处理很多(可能是infinte)元素,所以它是必须使用大量的RAM。但有时程序会填充数组,所以程序占用了大量的RAM并且只能处理很少的元素。所以我想使用二叉树,所以当我想放置另一个元素时,我初始化一个新的元素结构,当我删除它时,程序dealloc结构,我可以有" infintie"元件。但是我遇到了两个问题:
1)如果我调用一个分配新结构的函数并将指针返回给它,那么结构就不会自动解除分配,因为函数已经完成 2)结构whitout顺序的程序alloc和dealloc元素,所以数组是完美的,因为它需要一个布尔标志" active"或者"不活跃"对于每个结构,但在树中,事情更复杂,我必须删除节点,然后将他的孩子重新链接到另一个没有孩子的节点......
你怎么看?每个建议都是谢谢。答案 0 :(得分:0)
如果我正确理解了您的问题,您希望有很多struct element
,其中sizeof(struct element)
非常大,并且您希望在程序中动态添加和删除它们。
这意味着您要动态地为它们分配和释放内存,因此您希望使用malloc()
和free()
,并且您将使用struct elem *
。现在保持指针的数据结构取决于您将对数据执行的操作。
如果您不需要搜索元素(或者如果您从未在某个点上搜索过很多元素),如果它只是通过它们进行迭代,那么Linked list是合适的。它允许您动态添加和删除元素,并且它具有内存效率。
如果您需要搜索元素,但只使用一个变量,则可以将指针放入binary tree(或hash table)。
否则(如果您需要使用多个变量搜索数据),您应该将它们保存在链表中并构造二叉树或哈希表index以加速搜索经常搜索的变量。
但在那时,您可能会考虑使用一些现有的DBMS。