数据结构——B+树基础

1.B-树的缺陷:

按照顺序去遍历所有的节点,但是B-树实现按照顺序去遍历所有的节点话,指针会在各个节点间反复跳跃,效率比较低,这就引出了B+树

查找某个范围内的所有节点,效率比较低

B-树和B+树差异:

  • B+树的叶子节点层通过链表从左至右连接起来了(注意:图上看着像是单链表,其实底层是双向链表)
  • B+树的叶子节点层包含了所有的有效元素,而且其他层节点层只是作为索引层来存在(其他层当做快捷方式即可)
  • B-树的所有元素只会出现一次,而B+树元素有可能出现多次
  • 总结,所以查找一个值的话,B+树只需要从叶子节点层最左侧的节点出发,然后依次对所有 的元素进行遍历即可

B+树的概念和性质:

  • B+树的叶子节点层包含了所有的元素及其指向其存储在磁盘中的记录指针,非叶子节点层作为索引存在
  • M阶B+树指的是节点的分支个数上限是M个,且元素上限也是M个
  • B+树在我们的顺序遍历和随机查找以及范围查找方面很厉害

B+树的有效节点设计:

cpp 复制代码
#pragma once
#define M 5
typedef int ElemType;

//磁盘中的记录写一个泛型
//记录集结构体
typedef struct {}Record;

typedef enum{LEAF,BRANCH}NodeType;

//B+树的有效节点结构体设计
typedef struct BPlusNode {
	int key_num;//1.当前节点的有效元素个数 
	ElemType key_arr[M + 1];//2.一个存储若干个有效元素的数组
	struct BPlusNode* ptr_arr[M + 1];//3.一个存储若干个指向其孩子节点的指针数组
	struct BPlusNode* parent;//4.双亲指针
	Record*recptr[M + 1];//5.存储每一个元素所对应的在磁盘上的记录的指针数组

	NodeType type;//1.标签,表示当前节点是叶子节点还是非叶子节点
	
	struct BPlusNode* prev;//2.前驱指针
	
	struct BPlusNode* next;//3.后继指针


}BPlusNode;

//B+树的辅助节点结构体设计
typedef struct BPlusTree {
	BPlusNode* root;//指向根节点
	BPlusNode* first;//指向最小的叶叶节点
};
//查找函数返回值结构体单独设计一下
typedef struct Result {
	bool tag;
	BPlusNode* pNode;
	int index;
}Result;
相关推荐
揽星河..1 天前
【初阶数据结构】常见的排序算法
数据结构·排序算法·1024程序员节
YLCHUP1 天前
【模拟&STL】题解:AT_abc203_e [ABC203E] White Pawn_基础算法_数据结构_STL模板库_AtcoderABC_C++算法竞赛
数据结构·c++·算法·leetcode·动态规划·哈希算法·近邻算法
啊啊啊啊啊!!!!1 天前
【c++】⽤哈希表封装myunordered_map和myunordered_set
数据结构·哈希算法·散列表
(●—●)橘子……1 天前
力扣 第525场周赛 练习理解
数据结构·python·学习·算法·leetcode
Tt有了t1 天前
Redis的数据结构
数据结构·数据库·redis
東隅已逝,桑榆非晚1 天前
map和set的使用
数据结构·c++·笔记·学习
2601_970703831 天前
除湿机原理研究报告:一台机器在物理上能走多远
大数据·数据结构·算法·数据库架构·推荐算法
若亦_1 天前
排序>>选择排序
数据结构·算法·排序算法
重生之小比特1 天前
【算法拾光】前缀和|一维前缀和 + 二维前缀和
数据结构·算法