开源C语言库Melon:红黑树 本文对Melon库中的红黑树进行介绍,关于Melon库,这是一个开源的C语言库,它具有:开箱即用、无第三方依赖、安装部署简单、中英文文档齐全等优势。 Github repo 简介 红黑树是一种被应用的非常广泛的数据结构,用于快速搜索指定数据集中的数据。 这里我们不对红黑树的原理进行展开,仅给出其时间复杂度和使用场景介绍。 时间复杂度 插入:O(logN)删除:O(logN)搜索:O(logN) 使用场景 实现字典查询,即kv查询文件描述符索引,例如维护socket fd 使用 Melon库中的红黑树经历了若干次迭代,最终形成了当前的使用形态。我们先给出代码,再进而说明为何会演变至此。 红黑树 函数大致流程如下:定义变量初始化Melon库设置红黑树初始化属性创建红黑树创建红黑树结点插入结点搜索结点删除结点销毁结点销毁红黑树结构 Melon中,使用红黑树需要引入头文件。 这里我们需要对红黑树初始化属性进行一番说明,这也是演变至今逐渐变复杂的地方。 其中:是用于支持用户自定义内存池之用的,该指针将于和配合使用。是用于支持用户自定义分配内存之用,该函数指针第一个参数为,第二个参数是要分配的内存大小。是用于支持用户自定义释放内存之用,该函数指针第一个参数为要释放的内存起始地址。是用于对两个树结点所关联的用户自定义数据进行比较大小之用的。是用于对红黑树结点所关联的用户自定义数据进行释放之用的。 这些指针,若无需要可以置。 内存池和分配释放函数主要是用于树结点的分配和释放之用。之所以不直接给出一个Melon实现的内存池结构指针,是因为不希望红黑树代码与内存池类型强关联,这样允许红黑树可以接入使用者自己定义的内存管理功能。 演化 早期,红黑树只有和。后来加入了、和来增加内存分配来源。 从14年至今的使用中,会不断遇到新的使用场景,因此对红黑树内部结构做各种调整,例如:遍历红黑树所有结点遍历红黑树所有结点的同时删除其中的结点增加结点计数 因此,如果读者阅读源码,会发现树结构中还有一个双向链表结构用来辅助结点遍历。 可能有的读者会提出,为什么树结点不能与关联的自定义数据结构一同分配,类似如下代码: 这段代码不能真实执行。 之所以不这样设计,并非没有设想和尝试过。但是发现如此设计存在一下优劣势:优势:少了一次树结点内存分配动作劣势:如果结点要加入多个树结构,则需要在结构体中给出多个node成员,若并不一定每一个树结构都加入,则会造成一定的内存浪费。且后续功能扩展时引入了红黑树结构,也有可能要给很多结构体中引入node结点,才能完成红黑树的功能,这增加了二开的成本。 结语 Melon中的红黑树目前演化至此,相信也不会是其最终形态。也希望广大开发者朋友提出宝贵意见和建议。 另外对于Melon库感兴趣的读者,可以访问Github仓库。 感谢阅读!
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/28056.html