B树的定义
B树又称多路平衡查找树,B树中所有结点孩子个数的最大值称为B树的阶,通常用M表示。
代码定义
// 这是一个B树数据结构的定义。它包含了一个结构体_btree_node,该结构体表示B树的节点,并具有以下属性:
// keys:保存节点中的关键字的数组。这里定义为int类型的指针,表示一个动态数组。
// childrens:保存子节点的数组。这里定义为指向_btree_node结构体的指针的指针,表示一个动态数组。
// num:节点中已存储的关键字数量。
// leaf:一个标志位,指示该节点是否为叶子节点。
// 另外,还定义了一个结构体_btree表示整个B树,包含一个指向根节点的指针。
#define SUB_M 3
typedef struct _btree_node
{
int *keys; // 5
struct _btree_node **childrens; // 6
int num;
int leaf;
}btree_node;
struct _btree
{
struct _btree_node *root;
};
性质
- B树内部结点也存储数据;而B+树只有叶子结点存储数据,内结点只是索引作用。
- B+树的内结点只有索引作用,故索引磁盘时,可以将索引全部存入内存,故B+树寻址更快。(只需要一次访存就可以找到需要数据的地址)
B树的插入和删除
B树的删除:对于内结点,想办法使内结点变成叶子结点再进行删除即可。先合并或者借位,再进行删除。