电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

B+树的实现算法(C++版)

B+树的实现算法(C++版)_第1页
1/18
B+树的实现算法(C++版)_第2页
2/18
B+树的实现算法(C++版)_第3页
3/18
B+树算法与源码(C++语言描述) B+树可以看作是B 树的变形,对于存放在外存贮器上的字典,B+树比B 树更为常用。 一个m 阶的B+树满足下列条件∶ (1) 每个结点至多有 m 棵子树。 (2) 除根结点外,其它每个分支至少有 m/2棵子树。 (3) 非叶结点的根结点至少有两棵子树。 (4) 有 n 棵子树的结点有 n 个关键码,叶结点中至少包含 n/2个关键码。 (5) 叶结点都在同一层中,其中存放数据文件中记录的关键码及指向该记录的指针,或存放数据文件分块后每块的最大关键码及指向该块的指针。叶结点按关键码值大小顺序链接。可以把每个叶结点看成是一个基本索引块(直接指向数据文件中的记录)。 (6) 所有分支结点可看成是索引的索引。使结点中仅包含它的各个子结点中最大(或最小)关键码的分界值及指向子结点的指针。 /* * test.cpp * * Created on: 2012-10-10 * Author: charle */ //typedef char* CHARPTR; #include #include using namespace std; #define MAX_CNT 5 #define MIN_CNT 2 typedef struct BTreeNode{ //最大 key 个数为5,最小为2 int key[5];//关键字数组 int nodetype;//节点类型:0-根,1-内部节点,2-外节点 bool isleaf;//是否为叶节点 int nsize;//关键字个数; BTreeNode* succeedingnode[6]; BTreeNode* parentnode; }_BTreeNode; _BTreeNode* Create_BTree(int key) { _BTreeNode *root; root = new _BTreeNode(); root->isleaf = 0; for(int i = 0;i<6;i++) root->succeedingnode[i] = NULL; root->parentnode = NULL; root->nsize = 0; Insert_BTree(root,key); return root; } int middleNode(_BTreeNode* p,int key) { int cnt; int c = p->nsize; int tmp[c + 1]; bool flag = false; int j = c; for(int i = c-1;i>=0 && j>=0;i--) { if(p->key[i]>key) { tmp[j--] = p->key[i]; } else if(p->key[i]<=key && flag == false) { tmp[j--] = key; tmp[j--] = p->key[i]; flag = true; } else { tmp[j--] = p->key[i]; } } return tmp[(c+1)/2]; } _BTreeNode* createNode() { _BTreeNode* p = new _BTreeNode(); return p; } /*** * 查询功能 */ _BTreeNode *selectKey(_BTreeNode *root,int key) { _BTreeNode...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

B+树的实现算法(C++版)

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部