数据结构与算法系列---B-树

 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->
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值