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. 构造方法 ...
随机推荐
- aiohttp AppRunner的用法
参考廖雪峰的aiohttp教程,会出现两个DeprecationWarning, loop argument is deprecated Application.make_handler(...) i ...
- Ubuntu 安装 uget
PPA方式 sudo add-apt-repository ppa:plushuang-tw/uget-stable sudo apt update sudo apt install uget -y ...
- ckeditor_配置 修改工具栏段落的标签和在文中的格式
在默认的工具栏中自带一个格式的选项,可以编辑文字的段落属性,将文字转换为标题.ckeditor中提供了方法可以对这个标签进行修改. 正在做的项目中不叫标题1标题2,叫章.节.条... . 需要进行配置 ...
- vue 新建项目
1. 首先安装node.js,安装时一直点Next,知道Finish就可以安装成功 2. 打开控制命令执行程序cmd,输入node -v ,可以查看node的版本信息,即安装成功,我安装的是v8.12 ...
- 移动端单位rem计算
!(function(doc, win) { var docEl = doc.documentElement, resizeEvt = 'orientationchange' in window ? ...
- linux 下 mac 地址如何查询
cat /sys/class/net/eth0/address
- 下一站 java
一直都在windows的圈子里打滚,偶尔玩玩Linux, Python, Java. 可是最近聊起windows的时候,总是觉得有些不得力,比如说,windows下有IE,MSMQ,IIS,普通使用没 ...
- transmission跳过文件校验功能实现
贴吧链接:https://tieba.baidu.com/p/4839039900 GitHub:https://github.com/superlukia/transmission-2.92_ski ...
- Ansys热应力计算
目录 问题说明 温度场分析APDL 结果 问题说明 样块上下两端固定,在室温20℃下进行夹紧,分析其升温到150℃时的热应力. 采用间接法进行分析,温度场单元选择278,应力场单元为185 首先进行稳 ...
- R-shiny服务器安装及配置
R的shiny 服务器管理-入门http://www.bio-info-trainee.com/1683.html sudo systemctl start shiny-serversudo syst ...