C语言数据结构基础学习笔记——B树
2-3树:是一种多路查找树,包含2结点和3结点两种结点,其所有叶子结点都在同一层次。
2结点:包含一个关键字和两个孩子(或没有孩子),其左孩子的值小于该结点,右孩子的值大于该结点。
3结点:包含两个关键字和三个孩子(或没有孩子),其左孩子的值小于关键字最小值,右孩子的值大于关键字最大值,中间孩子的值介于两个关键字之间。
2-3-4树:类似于2-3树,4结点包含三个关键字和四个孩子。
B树:是一种平衡的多路查找树,2-3树和2-3-4树都是B树的特例,树中各结点中最大的孩子数目称为B树的阶。
一个m阶的B树,或为空树,或为满足以下特性的m叉树:
①树中每个结点至多有m棵子树;
②各根结点不是终端结点,则至少有2课子树;
③除根结点外所有非叶节点至少有⌈m/2⌉(向上取整号)课子树;
④所有非叶结点的结构:{n,p0,k0,p1,k1,……kn,pn};
⑤所有的叶子结点出现在同一层次,不带信息。
B树的查找:多路查找,类似于二叉树的查找。
B树的插入:在B树中找到待插入的位置后,并不能简单的将其插入到终端结点的位置,因为此时可能会导致整棵树不再满足B树中的要求。应依次把值待定的放入结点中,当结点的数超过规定的关键字数时进行分裂。
B树的删除:与插入操作类似,但需要使得删除后结点中的关键字个数>=⌈m/2⌉-1,因此将涉及结点的“合并”问题,分以下情况讨论:
①如果删除的关键字在终端结点上(最底层非叶子结点):
①结点的关键字数量大于⌈m/2⌉-1,这时删除这个关键字不会破坏B树的定义要求,所以直接删除;
②结点内关键字数量等于⌈m/2⌉-1,并且其左右兄弟结点中存在关键字数量大于⌈m/2⌉-1的结点,则去兄弟结点中借关键字;
③结点内关键字数量等于⌈m/2⌉-1,并且其左右兄弟结点中不存在关键字数量大于⌈m/2⌉-1的结点,则需要进行结点合并;
②如果删除的关键字不再终端结点上(最底层非叶子结点):需要先转换到终端结点上,再按照终端结点上的情况来删除,其转换到终端结点的方法为:
①存在关键字数量大于⌈m/2⌉-1结点的左子树或者右子树,在对应子树上找到该关键字的相邻关键字(就是这个大小序列中该关键字的直接前驱或者直接后继),然后将相邻关键字替换待删除的关键字;
②若左右子树的关键字数量均等于⌈m/2⌉-1,则将这两个左右子树结点合并,然后删除待删除关键字。
B+树:是常用于数据库和操作系统文件系统中的一种用于查找的数据结构,m阶B+树与B树的主要差异在:
①在B+树中,具有n个关键字的结点只含有n棵子树,即每个关键字对应一颗子树;而在B树中,具有n个关键字的结点含有(n+1)棵子树;
②在B+树中,每个非根结点关键字个数n的范文是⌈m/2⌉<=n<=m(根结点1<=n<=m),在B树中,每个非根结点关键字的个数n范围是⌈m/2⌉-1<=n<=m-1;
③在B+树中,叶结点包含信息,所有非叶结点只起到索引的作用,非叶结点中的每个索引项只含有对应子树的最大关键字和指向该子树的指针,不含有该关键字对应记录的存储地址;
④在B+树中,叶结点包含了全部关键字,即在非叶结点中出现的关键字也会出现在叶结点中;而在B树中,叶结点包含的关键字和其他结点包含的关键字是不重复的。
C语言数据结构基础学习笔记——B树的更多相关文章
- C语言数据结构基础学习笔记——树
树是一种一对多的逻辑结构,树的子树之间没有关系. 度:结点拥有的子树数量. 树的度:树中所有结点的度的最大值. 结点的深度:从根开始,自顶向下计数. 结点的高度:从叶结点开始,自底向上计数. 树的性质 ...
- C语言数据结构基础学习笔记——C语言基础
抽象数据类型(ADT)是指一个数学模型以及定义在该模型上的一组操作,通常用(数据对象,数据关系,基本操作集)这样的三元组来表示抽象数据类型. 数据结构是相互之间存在一种或多种特定关系的数据元素的集合, ...
- C语言数据结构基础学习笔记——动态查找表
动态查找表包括二叉排序树和二叉平衡树. 二叉排序树:也叫二叉搜索树,它或是一颗空树,或是具有以下性质的二叉树: ①若左子树不空,则左子树上所有结点的值均小于它的根结点的值: ②若右子树不空,则右子树上 ...
- C语言数据结构基础学习笔记——图
图(G)由顶点集(V)和边集(E)组成,G=(V,E) 常用概念: ①V(G)表示图G中顶点的有限非空集,V永不为空: ②用|V|表示图G中顶点的个数,也称为图G的阶: ③E(G)表示图G中顶点之间关 ...
- C语言数据结构基础学习笔记——栈和队列
之前我们学过了普通的线性表,接下来我们来了解一下两种特殊的线性表——栈和队列. 栈是只允许在一端进行插入或删除的线性表. 栈的顺序存储结构也叫作顺序栈,对于栈顶指针top,当栈为空栈时,top=-1: ...
- C语言数据结构基础学习笔记——静态查找表
查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找. 查找表:用于查找的数据集合称为查找表,一般有以下操作:①查找是否在表中:②查找属性:③进行操作. 查找表又分为: ①静态查找表:只可以进行 ...
- C语言数据结构基础学习笔记——基础线性表
线性表是指具有相同数据类型的n(n>=0)个数据元素的有限序列,它具有一个表头元素和一个表尾元素,并且每一个数据元素最多只有一个直接前驱和一个直接后继. 线性表的顺序存储也叫作顺序表,它的特性是 ...
- Oracle基础学习笔记
Oracle基础学习笔记 最近找到一份实习工作,有点头疼的是,有阶段性考核,这...,实际想想看,大学期间只学过数据库原理,并没有针对某一数据库管理系统而系统的学习,这正好是一个机会,于是乎用了三天时 ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
随机推荐
- D2 有关写博客新的体会以及面向对象
之前几篇博客一大堆废话,着实浪费时间也没啥实际作用.除了总结一些java的知识点外,再用一些比喻或者形象化的语言来表述这些知识点,无可厚非.但是,现在看来,应当减少这种堆满偏理论式偏方法性的内容的博客 ...
- Python全栈之路----常用模块----logging模块
很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,loggin ...
- springBoot 自动配置原理--自己新建一个 starter
上篇我们说到 springboot 和 SSM 框架的区别,今天我们就看看 springboot 到底为我们做了哪些事情,让我们开发变得如此简单. springboot 中起着重要作用的是 start ...
- Java线程池不错的总结博客
ImportNew线程池总结 Java多线程之Executor.ExecutorService.Executors.Callable.Future与FutureTask 线程池,这一篇或许就够了
- Codeforces 1105C: Ayoub and Lost Array(递推)
time limit per test: 1 second memory limit per test: 256 megabytes input: standard input output: sta ...
- ue4 StringTable
StringTable 用法很简单可以参考 https://blog.csdn.net/u012801153/article/details/80393531 这里只说说上面文章中没提到的小技巧 T ...
- 在树莓派2或3的kali上 RCA(a/v connector)接口的正确使用方法(多图)(原创)
AV接口又称(RCA),AV接口算是出现比较早的一种接口,它由黄.白.红三种颜色的线组成,其中黄线为视频,红色为左声道,白色为右声道. ...
- [Ms SQL] 基本創建、修改與刪除
##創建 table student, 內涵 id ,name ,tel三種columne,設定id為primary key create table student ( id int primary ...
- mini-treeselect的动态赋值
<div id="faultTree" allowdrag="false" allowdrop="true" class=" ...
- servlet_1
HttpServlet超类在java构建路径中没有找到 https://jingyan.baidu.com/article/6c67b1d69a37a02787bb1ee2.html ======== ...