红黑树的使用场景非常广泛,比如nginx中用来管理timer、epoll中用红黑树管理事件块(文件描述符)、Linux进程调度Completely Fair Scheduler用红黑树管理进程控制块、C++STL中map,set的底层实现全是用的红黑树。掌握红黑树的原理以及使用场景,对于我们面试和工作、以及理解开源代码都是非常有帮助。 二叉树介绍 在关注红黑树之...
红黑树首先作为树的结构出现,包含了树形结构的基本特征,操作具有查找、添加、删除。在添加节点时必然导致红黑树的结构不符合红黑树规则,此时将对添加节点后的树进行旋转(左旋和右旋)以保证回复红黑树的特性。 下面将以红黑树的旋转、添加、删除进行逐步讲解。 红黑树基本节点定义 #defineRED 0//红色节点#defineBLACK ...
Red-Black Tree(红黑树)是一种自平衡二叉查找树,它在1972年由 Rudolf Bayer 发明,他称之为 “Symmetric Binary B-Tree”。Leo J. Guibas 和 Robert Sedgewick 在1978年写的一篇论文中把它命名为“Red-Black Tree”。它有良好的最坏情况下的运行时间,实践中也非常高效。它可以在 Ο(log n) 的时间内查找、...
STL 中的关联式容器低层数据结构为红黑树,其功能都是调用低层数据结构中提供的相应接口。 set元的元素不会像map那样同时拥有键(key)和值(value)。 set元素的键就是值,值就是键,并不允许两个元素有相同的键。 multiset允许相同键值存在。 因为set元素的键和值相等,所以不允许对set元素的值进行修改。(数据结构...
红黑树在日常的使用中比较常用,例如Java的TreeMap和TreeSet,C++的STL,以及Linux内核中都有用到。之前写过一篇文章专门介绍红黑树的理论知识,本文将给出红黑数的C语言的实现代码,后序章节再分别给出C++和Java版本的实现。还是那句话,三种实现原理相同,择其一了解即可;若文章有错误或不足的地方,望不吝指出!
Set(集合)属于关联式容器,也是STL中最实用的容器,关联式容器依据特定的排序准则,自动为其元素排序。Set集合的底层使用一颗红黑树(可能读者对此不太了解,等但学到树论与图论的章节的时候就会明白原因),其属于一种非线性的数据结构,每一次插入数据都会自动进行排序,注意,不是需要排序时再排序,而是每一次插入数据的时候...
红黑树的应用场景 C++ STL中的两大容器:set 、map ,它们底层都是由红黑树封装而成 进程调度cfs epoll中使用红黑树管理socketfd nginx中使用红黑树管理定时器,中序遍历第一个就是最小的定时器 红黑树为什么常用 1、红黑树是以 key-value 对组(pair)元素的形式存储数据的,key值可以起到索引的作用,而value值则...
STL包含迭代器、容器、算法、仿函数和适配器等五个主要部分。 容器可分为序列式和关联式两种,算法主要是对容器中元素进行操作和处理,仿函数则是封装了自定义函数的类模板。 内部实现主要基于模板和泛型编程,利用C++模板的特性将数据类型和算法进行解耦,使得STL可适用于各种数据类型和编程范式。
红黑树有着良好的稳定性和完整的功能,性能表现也很不错,综合实力强,在 STL 的 set 和 map 等容器中被优先使用。 因为红黑树也是一种二叉树,所以例如:插入结点、删除结点、查询结点等针对红黑树的操作与二叉树的操作前段演算法相同,只是在每次操作完后可能会让树的结构改变而可能无法满足红黑树的规则,进而可能不...
高性能:如 map 可以高效地从十万条记录里面查找出指定的记录,因为 map 是采用红黑树的变体实现的。 高移植性:如在项目 A 上用 STL 编写的模块,可以直接移植到项目 B 上。三大组件介绍 1. 容器 几乎可以说,任何特定的数据结构都是为了实现某种特定的算法。STL容器就是将运用最广泛的一些数据结构实现出来。