二十万字C/C++、嵌入式软开面试题全集宝典十一
目录
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++、嵌入式软开面试题全集宝典十一相关推荐
- 二十万字C/C++、嵌入式软开面试题全集宝典七
目录 121. 怎样判断两个浮点数是否相等? 122. 宏定义一个取两个数中较大值的功能 123. define.const.typedef.inline使用方法? 124. printf实现原理? ...
- 二十万字C/C++、嵌入式软开面试题全集宝典八
目录 141. 迭代器++it,it++哪个好,为什么 142. C++如何处理多个异常的? 143. 模板和实现可不可以不写在一个文件里面?为什么? 144. 在成员函数中调用delete this ...
- 二十万字C/C++、嵌入式软开面试题全集宝典五
目录 81. vector越界访问下标,map越界访问下标?vector删除元素时会不会释放空间? 82. map[]与find的区别? 83. STL中list与queue之间的区别 84. STL ...
- 二十万字C/C++、嵌入式软开面试题全集宝典四
目录 1. 虚函数的代价? 2. 用C语言实现C++的继承 3. 继承机制中对象之间如何转换?指针和引用之间如何转换? 4. C++四种类型转换 5. 为什么要用static_cast转换而不用c语言 ...
- 二十万字C/C++、嵌入式软开面试题全集宝典三
目录 1. 构造函数析构函数可否抛出异常 2. 类如何实现只能静态分配和只能动态分配 3. 如果想将某个类用作基类,为什么该类必须定义而非声明? 4. 什么情况会自动生成默认构造函数? 5. 构造函数 ...
- 二十万字C/C++、嵌入式软开面试题全集宝典二
目录 1.静态绑定和动态绑定的介绍 2.C语言struct和C++struct区别 3.虚函数可以声明为inline吗? 4.介绍 C++ 所有的构造函数 5. 什么情况下会调用拷贝构造函数 6. 为 ...
- 二十万字C/C++、嵌入式软开面试题全集宝典十
目录 1. 编码实现某一变量某位清0或置1 2. 分别写出BOOL,int,float,指针类型的变量a 与"零"的比较语句. 3. 局部变量全局变量的问题? 4. 数组和指针的区 ...
- 二十万字C/C++、嵌入式软开面试题全集宝典九
目录 161. 空类 162. 空类会默认添加哪些东西?怎么写? 163. 标准库是什么? 164. const char* 与string之间的关系,传递参数问题? 165. char * 与cha ...
- 二十万字C/C++、嵌入式软开面试题全集宝典六
目录 101. 字节对齐有什么作用? 102. C语言中#pragma用法 103. new和malloc的区别? 104. malloc/calloc/realloc三者之间的区别? 105. de ...
最新文章
- 谈谈Mux与门电路的相互替换(包含实例分析)
- apimonitor 神器啊 。。
- 性能分析--视图优化
- 400 多页的 Java 面试笔记,各个公司面试真题!
- spark on yarn任务提交及运行完整流程图
- 视频专辑:Hibernate 视频
- 王飞跃 | 社会机器:历史的起源与目标
- 怎么把html表复制到word里,怎么把网页表格复制到word
- Python量化交易基础讲堂-详解随机数的生成
- char与byte差异
- 最新白白iApp手册开源-iApp源码 非常牛逼
- 在windows7下给vs2015配置dirent.h头文件
- 学计算机程序ui设计,学习UI设计需要什么样的电脑配置
- 计算机系统兼容在哪里,电脑怎么看系统兼容的
- 苏超 计算机系 南京大学,Ni-Ti基合金薄膜相变行为及其力学特性研究
- 利用OneDrive网盘建站
- 信贷风控报表常用指标解读(一)
- 今年春节,租个“人设”回家?
- 块数据传输程序:将由src单元开始的20个字,转存到由dst开始的单元中(带详细注释)
- tomcat 没有service.bat、tomcat8.exe、tomcat8w.exe、tomcatX.exe文件,官网下载方法及地址