收录日期:2020/07/07 00:12:29 时间:2016/06/05 05:50:06 标签:C++ 语言
有道题,好像是数据结构上的,请教一下大家:
用C++实现B树的建立、删除、查询、添加,orber=K.


请大家帮忙,非常感谢!!
这个题目还是自己做吧
为什么啊? 
我自己是实在解决不了才上来问的,请高手帮忙,很急的,关系到生死存亡啊。。
直接求代码,新手乐园<=将来可能会看到
可是现在没时间等将来啊。。高手们,帮忙啊,周三要交,直接影响学分啊。。555
哈哈
怪谁呢?
btnode.h

#ifndef BTNODE_H
#define BTNODE_H
struct btnode
{
btnode(bool lf = false,int n = 0){}
bool leaf;
btnode * c; //pointer to children
int * k; // key value
int n; // size
};

#endif

//bttree.h

#ifndef BTTREE_H
#define BTTREE_H
#include "BTNode.h"
class BTree
{
public:

BTree(int d = 2);
void insert(int k);
private:
void splitchild(btnode * x,int i,btnode * y);
void insertnotfull(btnode * x,int k);

btnode * root;
int degree;
};

BTree::BTree(int d):degree(d)
{
root = new btnode();
root->c = new btnode[2*degree];
root->k = new int[2*degree - 1];
}

void BTree::insert(int k)
{
btnode * r = root;
if(r->n == 2*degree - 1)
{
btnode * s = new btnode();
s->c = new btnode[2*degree];
s->k = new int[2*degree - 1];
s->c[0] = r;
splitchild(s,0,r);
insertnotfull(r,k);
}
else
insertnotfull(r,k);
}

void BTree::splitchild(btnode * x,int i,btnode * y)
{
btnode * z = new btnode();
z->k = new int[2*degree - 1];
z->c = new btnode[2*degree];
z->n = degree - 1;
z->leaf = y->leaf;
for(int j = 0;j<degree-1;j++)
{
z->k[j] = y->k[degree-1+j];
}
if(y->leaf != true)
{
for(int j = 0;j<degree;j++)
{
z->c[j] = y->c[degree-1+j];
}
}
y->n = degree - 1;
x->c[i+1] = z; //x's ith child is btnode z;
for(int l = 2*degree-2;l>i;i++)         // for all x->k after i;
{
x->k[l+1] = x->k[l];
}
x->k[i] = y->k[i]; //insert y->k[i] into x;
for(int l = i;l<degree-1;l++) // for all y->k after i;
y->k[l] = y->k[l+1];                
x->n++;
}

void BTree::insertnotfull(btnode * x,int k)
{
int i = x->n;
if(x->leaf == true)
{
while( (i>0) && (x->k[i]<k) )
{
x->k[i+1] = x->k[i];
i--;
}
x->k[i] = k;
}
else
{
i = x->n;
while( (i>=0) && (x->k[i]>k) )
i--;
i = i+1;
if(x->n == 2*this->degree - 1)
{
this->splitchild(x,i,&(x->c[i]));

}
this->insertnotfull(&(x->c[i]),k);
}
}
#endif
以前写的,,不知道是帮你还是害你 呵呵!~  
老实说,这种东西,学习还是要自己做一下比较好!
弊大于益,以前数据结构时B树我没有自己做,后来做DBMS时还不是要自己去做
一大早就有这么大的惊喜,真的非常感谢!!
我先自己研究一下,有问题再请教各位吧。谢谢!!

欢迎拍砖!没有面向对象,只有面向过程。 新手提问题,在线等。用myeclipse运行struts2例子出现404错误详细信息如下 如何设置域名发布网站啊?? 急急急! 求一SQL语句 修改表中的字段名称 我感觉我的才学在水源其他水友之上 AJAX,如何一次刷新同一页面两个地方的内容呢? C# web中使用ZedGraph做折线遇到的问题 关于句柄的问题 关于C#的一个很简单绑定问题 在程序中如何修改文件夹的名字 frameset导航 asp.net datagrid 添加了checkbox但是checkbox的显示状态时只读且全选,该如何解决~! 请教如何调用存储过程到到页面GridView显示 虚拟光驱安装包制作 再次请教ASP+ac下运行正常,换成SQL就不显示的问题. 问下这个视图怎么写 学生请Out... 关于ant解压超大文件的问题。。。 SWT 键盘事件 回车 mfc不能输入►这个字符 winfrom开发一个程序,数据集的问题 请问如何在<%%>中在嵌套一个<%%> 谁有vc++考题或习题 Delphi做图像软件方便吗 如何根据同一字段多个值join查询? 是不是我的thread checker安装有问题呢 ? Windows7(x64)下安装VS2008后? 企业管理要量身定做 求助API函数