B-树是一种平衡的多路查找树,它有较高的查找的效率,在文件系统中很有用.
一、B-树的定义
一棵"m 阶的B树"或为空树,或为具有以下特性的 m 叉查找树:
(1)树中每个结点至多有 m 棵子树;
(2)除根以外的所有非叶结点至少有 [m/2 ]棵子树,根结点若是非叶结点,则至少有两棵子树;
(3)所有的非叶结点中含有如下信息:
(n,A0,(K1,D1),A1,(K2,D2),……,An-1,(Kn,Dn),An)
其中:(Ki,Di)(i=1,…,n)为索引项,且 Ki<Ki+1(i=1,…,n-1);Ai(i=0,…,n) 为指向子树根结点的指针,且 Ai-1 所指子树中所有索引项的关键码小于 Ki(i=1,…,n),An 所指子树中索引项的关键码大于 Kn,n(m/2-1≤n≤m-1) 为结点中索引项的个数;
(4)所有叶结点都在同一层上,且不含任何信息。
下图为一棵4阶树:

二,B-树的实现
下面为c代码,参照了<<数据结构>>(严蔚敏)一书中的算法:
#include
<
stdio.h
>
#include
<
malloc.h
>

#define
FALSE 0
#define
TRUE 1
#define
m 3

typedef
int
KeyType;
typedef
struct
BTNode
...
{
int keynum;
struct BTNode *parent;
KeyType key[m+1];
struct BTNode *ptr[m+1];
}
BTNode,
*
BTree;
typedef
struct

...
{
BTNode *pt;
int i;
int tag;
}
Result;
//
设结点中的指针向量为空
void
SetNull(BTree
&
p)
...
{
int i=0;
while(i<=p->keynum)
...{
p->ptr[i]=NULL;
i++;
}
}
//
在结点中查找关键字
int
SearchNode(BTree p,KeyType k)
...
{
int i=1;
while(i<=p->keynum)

本文介绍了B-树这种平衡的多路查找树,重点阐述了B-树的定义和特性,并提供了一个4阶B-树的例子。文章还提及了B-树在文件系统中的高效查找作用,同时给出了C语言实现B-树的代码参考。
最低0.47元/天 解锁文章
2065

被折叠的 条评论
为什么被折叠?



