c - 二叉树的结构分配

标签 c

很难从标题中看出我的问题。然而,

我正在编写一个使用结构数据库的程序。在这个结构中,我有关于数据库和数据库本身元素的信息。每个元素都是另一个结构。现在,我用一个简单的元素数组声明了元素,并定义了大小。但每个元素都很重(6 个 long double、一个 char[64]、一些 int 等等),我想让程序能够同时处理很多(可能是无限的)元素,所以有必要使用很多内存。但有时程序会填满数组,因此程序会占用大量 RAM,并且只能在很少的元素下运行。所以我想使用二叉树,所以当我想放置另一个元素时,我初始化一个新的元素结构,当我删除它时,程序释放该结构,我可以拥有“infintie”元素。但有两个问题困扰着我:

1) 如果我调用一个分配新结构并返回指向它的指针的函数,则该结构不会自动释放,因为该函数已完成 2)程序分配和释放结构的元素没有顺序,所以数组是完美的,因为每个结构都有一个 bool 标志“事件”或“非事件”,但在树中,事情更复杂,我必须删除该节点,然后将其子节点重新链接到另一个没有子节点的节点...

你觉得怎么样?我们非常感谢每一个建议。

最佳答案

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

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

如果您不需要在元素中搜索(或者如果您在某一时刻从未拥有过很多元素),如果只需迭代它们就足够了,则 Linked list是合适的。它允许您动态添加和删除元素,并且内存效率高。

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

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

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

关于c - 二叉树的结构分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36812248/

相关文章:

c - 如何使用 strtok 将由空格分隔的单词放入 C 中的 char 数组中?

mysql - 如何在没有 MySQL 客户端的情况下直接访问 MySQL InnoDB 索引值?

c - copy_from_user()的实现

C 检查 EOF

c - 交通信号程序 C 基本

c - gets() 在 scanf 之后如何工作?

C - 删除n叉树节点

c - 如何制作 IIR 滤波器?

c - 默认情况下,char 是有符号的还是无符号的?

C 链表条件语句