目录

1、 红黑树的性质

2、 红黑树的插入与旋转

3、 红黑树与平衡二叉树

4、 二叉平衡树、红黑树、B树、B+树的区别与联系

5、 hello world 程序开始到打印到屏幕上的全过程?


1、 红黑树的性质

性质1.节点是红色或黑色。

性质2.根节点是黑色。

性质3.每个叶子节点都是黑色的空节点(NIL节点)。

性质4.每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)

性质5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

这些约束强制了红黑树的关键性质:从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。结果是这个树大致上是平衡的。因为操作比如插入、删除和查找某个值的最坏情况时间都要求与树的高度成比例,这个在高度上的理论上限允许红黑树在最坏情况下都是高效的,而不同于普通的二叉查找树。

下图就是一个很典型的红黑树:

2、 红黑树的插入与旋转

1、添加的节点必须为红色

2、变色的情况:当前结点的父亲是红色,且它的叔结点也是红色:

2.1 把父节点设置为黑色

2.2 把叔节点设置为黑色

2.3 把祖父节点设置为红色

2.4 把当前指针定义到祖父节点,设为当前要操作的

3、左旋的情况:当前父节点是红色,叔节点是黑色,且当前的节点是右子树。

3.1 以父节点作为左旋。

4、右旋的情况:当前父节点是红色,叔节点是黑色,且当前的节点是左子树。

4.1 把父节点变成黑色

4.2 把祖父节点变为红色

4.3 以祖父节点右旋转

lsy注:

点这里

https://blog.csdn.net/qq_41687938/article/details/119634248

3、 红黑树与平衡二叉树

1、红黑树放弃了追求完全平衡,追求大致平衡,在与平衡二叉树的时间复杂度相差不大的情况下,保证每次插入最多只需要三次旋转就能达到平衡,实现起来也更为简单。

2、平衡二叉树追求绝对平衡,条件比较苛刻,实现起来比较麻烦,每次插入新节点之后需要旋转的次数不能预知。

lsy注:https://blog.csdn.net/qq_41687938/article/details/119634248

4、 二叉平衡树、红黑树、B树、B+树的区别与联系

1.二叉树的查找的时间复杂度是O(log2N),其查找效率与深度有关,而普通的二叉树可能由于内部节点排列问题退化成链表,这样查找效率就会很低。

2.平衡二叉树是更好的选择,因为它保持平衡,即通过旋转调整结构保持最小的深度。其查找的时间复杂度也是O(log2N)。

索引的结构也并非AVL树或更优秀的红黑树,尽管它的查询的时间复杂度很低。作为索引的结构应该是尽可能少的执行磁盘IO操作,因为执行磁盘IO操作非常的耗时。所以需要利用上磁盘的预读功能。平衡二叉树没利用上。

3.B树(多路搜索树)是为了充分利用磁盘预读功能来而创建的一种数据结构,也就是说B树就是为了作为索引才被发明出来的。

红黑树这种结构,h明显要深的多。由于逻辑上很近的节点(父子)物理上可能很远,无法利用局部性,所以红黑树的I/O渐进复杂度也为O(h),效率明显比B-Tree差很多。

4. 比B树更适合作为索引的结构是B+

B树:有序数组+平衡多叉树;

B+树:有序数组链表+平衡多叉树;

B+树的关键字全部存放在叶子节点中,非叶子节点用来做索引,而叶子节点中有一个指针指向一下个叶子节点。做这个优化的目的是为了提高区间访问的性能。而正是这个特性决定了B+树更适合用来存储外部数据。

lsy注:B树和B-树都是指B-Tree

详解平衡二叉树、红黑树、B树、B+树在索引中的应用_子木呀的博客-CSDN博客

5、 hello world 程序开始到打印到屏幕上的全过程?

1.用户告诉操作系统执行HelloWorld程序(通过键盘输入等)

2.操作系统:找到helloworld程序的相关信息,检查其类型是否是可执行文件;并通过程序首部信息,确定代码和数据在可执行文件中的位置并计算出对应的磁盘块地址。

3.操作系统:创建一个新进程,将HelloWorld可执行文件映射到该进程结构,表示由该进程执行helloworld程序。

4.操作系统:为helloworld程序设置cpu上下文环境,并跳到程序开始处。

5.执行helloworld程序的第一条指令,发生缺页异常

6.操作系统:分配一页物理内存,并将代码从磁盘读入内存,然后继续执行helloworld程序

7.helloword程序执行puts函数(系统调用),在显示器上写一字符串

8.操作系统:找到要将字符串送往的显示设备,通常设备是由一个进程控制的,所以,操作系统将要写的字符串送给该进程

9.操作系统:控制设备的进程告诉设备的窗口系统,它要显示该字符串,窗口系统确定这是一个合法的操作,然后将字符串转换成像素,将像素写入设备的存储映像区

10.视频硬件将像素转换成显示器可接收和一组控制数据信号

11.显示器解释信号,激发液晶屏

12.OK,我们在屏幕上看到了HelloWorld

二十万字C/C++、嵌入式软开面试题全集宝典十一相关推荐

  1. 二十万字C/C++、嵌入式软开面试题全集宝典七

    目录 121. 怎样判断两个浮点数是否相等? 122. 宏定义一个取两个数中较大值的功能 123. define.const.typedef.inline使用方法? 124. printf实现原理? ...

  2. 二十万字C/C++、嵌入式软开面试题全集宝典八

    目录 141. 迭代器++it,it++哪个好,为什么 142. C++如何处理多个异常的? 143. 模板和实现可不可以不写在一个文件里面?为什么? 144. 在成员函数中调用delete this ...

  3. 二十万字C/C++、嵌入式软开面试题全集宝典五

    目录 81. vector越界访问下标,map越界访问下标?vector删除元素时会不会释放空间? 82. map[]与find的区别? 83. STL中list与queue之间的区别 84. STL ...

  4. 二十万字C/C++、嵌入式软开面试题全集宝典四

    目录 1. 虚函数的代价? 2. 用C语言实现C++的继承 3. 继承机制中对象之间如何转换?指针和引用之间如何转换? 4. C++四种类型转换 5. 为什么要用static_cast转换而不用c语言 ...

  5. 二十万字C/C++、嵌入式软开面试题全集宝典三

    目录 1. 构造函数析构函数可否抛出异常 2. 类如何实现只能静态分配和只能动态分配 3. 如果想将某个类用作基类,为什么该类必须定义而非声明? 4. 什么情况会自动生成默认构造函数? 5. 构造函数 ...

  6. 二十万字C/C++、嵌入式软开面试题全集宝典二

    目录 1.静态绑定和动态绑定的介绍 2.C语言struct和C++struct区别 3.虚函数可以声明为inline吗? 4.介绍 C++ 所有的构造函数 5. 什么情况下会调用拷贝构造函数 6. 为 ...

  7. 二十万字C/C++、嵌入式软开面试题全集宝典十

    目录 1. 编码实现某一变量某位清0或置1 2. 分别写出BOOL,int,float,指针类型的变量a 与"零"的比较语句. 3. 局部变量全局变量的问题? 4. 数组和指针的区 ...

  8. 二十万字C/C++、嵌入式软开面试题全集宝典九

    目录 161. 空类 162. 空类会默认添加哪些东西?怎么写? 163. 标准库是什么? 164. const char* 与string之间的关系,传递参数问题? 165. char * 与cha ...

  9. 二十万字C/C++、嵌入式软开面试题全集宝典六

    目录 101. 字节对齐有什么作用? 102. C语言中#pragma用法 103. new和malloc的区别? 104. malloc/calloc/realloc三者之间的区别? 105. de ...

最新文章

  1. 谈谈Mux与门电路的相互替换(包含实例分析)
  2. apimonitor 神器啊 。。
  3. 性能分析--视图优化
  4. 400 多页的 Java 面试笔记,各个公司面试真题!
  5. spark on yarn任务提交及运行完整流程图
  6. 视频专辑:Hibernate 视频
  7. 王飞跃 | 社会机器:历史的起源与目标
  8. 怎么把html表复制到word里,怎么把网页表格复制到word
  9. Python量化交易基础讲堂-详解随机数的生成
  10. char与byte差异
  11. 最新白白iApp手册开源-iApp源码 非常牛逼
  12. 在windows7下给vs2015配置dirent.h头文件
  13. 学计算机程序ui设计,学习UI设计需要什么样的电脑配置
  14. 计算机系统兼容在哪里,电脑怎么看系统兼容的
  15. 苏超 计算机系 南京大学,Ni-Ti基合金薄膜相变行为及其力学特性研究
  16. 利用OneDrive网盘建站
  17. 信贷风控报表常用指标解读(一)
  18. 今年春节,租个“人设”回家?
  19. 块数据传输程序:将由src单元开始的20个字,转存到由dst开始的单元中(带详细注释)
  20. tomcat 没有service.bat、tomcat8.exe、tomcat8w.exe、tomcatX.exe文件,官网下载方法及地址

热门文章

  1. apple给我的感受
  2. linkedin规则
  3. 【转】Unity Scene场景自定义坐标轴
  4. 在coursera上有哪些值得推荐的课程
  5. 用VuePress搞定你的博客(一)
  6. 如何挂载阿里云Linux服务器的“数据盘”(新购买)
  7. HP LoadRunner 12.02 Tutorial T7177-88037教程独家中文版
  8. 应用DOM操作文档的一个实用例子
  9. 拓扑排序杭电 1285确定比赛名次
  10. Spring Cloud笔记