B-树(B-Tree)的C++演示代码

 B-树(B-Tree)的C++演示代码

    按照算法导论中伪代码转化,其中删除过程算法导论没有给出伪代码,所以对删除相关函数做了说明。另外B-Tree本来是用于硬盘的,但为了简便只阐明B-Tree的基本流程,没有加入硬盘扇区的直接读写操作,全部在内存中进行。

1.头文件(B-Tree.h)

#ifndef BTREE__JOHN__DMRC
#define BTREE__JOHN__DMRC
/*************************** Class BTreeNode ***************************/
template <typename T>
class BTreeNode{
public:
 BTreeNode(int, bool);
 ~BTreeNode();

// Varies
 int t;
 int len;
 bool leaf;
 T* key;
 BTreeNode<T>** child;
};

/**************************** Class BTree ******************************/
template <typename T>
class BTree{
public:
 BTree(int);
 ~BTree();
 bool BTree_Search(T);
 void BTree_Insert(T);
 bool BTree_Delete(T);
 // debug start
 void print_root();
 // debug end
private:
 bool btree_search(BTreeNode<T>*, T);
 void delete_tree(BTreeNode<T>*);
 void btree_split_child(BTreeNode<T>*, int, BTreeNode<T>*);
 void btree_insert_nonfull(BTreeNode<T>*, T);
 void btree_merge_child(BTreeNode<T>*, int);
 void btree_rotate_child(BTreeNode<T>*, int, bool);
 bool btree_delete_nonfew(BTreeNode<T>*, T);
 BTreeNode<T>* root;
 int t;
};

#endif

2 cpp文件(B-Tree.cpp)

#include "B-Tree.h"

/*************************** Class BTreeNode ***************************/
template <typename T>
BTreeNode<T>::BTreeNode(int a, bool b){
 this ->t = a;
 this ->len = 0;
 this ->leaf = b;
 this ->key = new int[2 * a - 1];
 this ->child = new BTreeNode*[2 * a];
}

template <typename T>
BTreeNode<T>::~BTreeNode(){
 delete [] this ->key;
 delete [] this ->child;
}

/**************************** Class BTree ******************************/
// C & D
template <typename T>
BTree<T>::BTree(int a){
 this ->t = a;
 this ->root = new BTreeNode<T>(a, true);
}

template <typename T>
BTree<T>::~BTree(){
 this ->delete_tree(this ->root);
}

template <typename T>
void BTr

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值