欢迎光临散文网 会员登陆 & 注册

B+树

2023-05-09 23:36 作者:玟玟的大宝贝  | 我要投稿

访问【WRITE-BUG数字空间】_[内附完整源码和文档]

数据结构实验的实验报告--B树

环境及工具

环境:C

工具:AnyivewCL

B 定义

一棵 m 阶 B 树(Balance Tree of order m), 或为空树,或满足下列的特性的 m 叉树:(本次实验采用链式存储结构)

(1)树中每个结点最多含有 m 棵子树。

(2)若根结点是非终端结点,则至少有 2 棵子树

(3)除根结点之外的所有非终端结点至少有「m/2 棵子树。

(4)每个非终端结点中包含信息:(n,A,K1,A1,K2,A2,…,Kn,An)。其中:

①K(1≤i≤n)为关键字,且关键字按升序推入指针。

②A(0≤≤n)指向子树的根结点,A(i-1)指向子树中所有结点的关键字均小于 Ki,且大于 K(i-1)。

③ 关键字的个数 n 必须满足「m/2-1≤n≤m-1。

(5)所有叶子结点都出现在同一层,叶子结点不包含任何信息(可以看作是外部结点或查找失败的结点,实际上这些结点不存在,指向这些结点的指针为空。实际上,B 树的结点还应包含 n 个指向每个关键字相应记录的指针。这与应用相关,从略。

存储结构定义和宏定义

# define M 4  //B树的阶,本次实验设置为4 # define  MAX M – 1   //每个节点存储的最多关键字的数目 # define MIN M/2   //每个节点存储的最少关键字的数目 # define N 14  //选取14个关键字的树作为例子 # define ERROR 0 # define SUCCESS 1 # define TRUE 1 # define UNSUCCESS 0 # define OVERFLOW -1 # define FALSE -1 typedef int Status; typedef int KeyType;//关键字类型为整形 typedef struct BTNode {    int keynum;                 //当前节点的关键字数目    KeyType key[M + 1];         //关键字数组,key[0]未用    struct BTNode parent;      //双亲结点指针    struct BTNode ptr[M + 1];  //孩子节点指针数组    //Record recptr[M + 1];    //记录指针向量,0号单元未用 } BTNode, BTree;               //B树的节点及指针类型 //B树查找的结果类型 typedef struct {    int tag;                    //1:查找成功,0:查找失败    BTree pt;                  //指向找到的结果类型    int index;                 //1 <= index <= M  在节点中的关键字位序 } Result;


B+树的评论 (共 条)

分享到微博请遵守国家法律