版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、-作者xxxx-日期xxxxB-树课程设计【精品文档】课程设计成果 学院: 计算机工程学院 班 级: 学生姓名: 学 号: 设计地点(单位) 设计题目: B-树 完成日期: 年 月 日 指导教师评语: 成绩(五级记分制): 教师签名: 目 录1 需求分析11.1 系统目标11.2 主体功能11.3 开发环境12概要设计12.1 功能模块划分12.2 系统流程图23 详细设计33.1 数据结构33.2 模块设计44 测试7测试数据7测试结果75 总结10参考文献11附录 源程序代码12【精品文档】1 需求分析1.1 系统目标完成B-树的创建、查找、插入和删除。1.2 主体功能B-Trees是一类
2、满足特殊条件的M路查找树,它满足如下两个条件的M路查找树:1.所有叶节点的高度相同。2.除根之外的所有节点都是半满的,即该节点包含M/2或更多的值。3.树中每个节点都至多有M棵树。4.所有的叶子节点都出现在同一层,并且不带信息。5.所有的非终端节点中包含下列信息:(n,A0,K1,A1,K2,A2K3,A3.Kn,An)其中:Ki为关键字,且KiKi+1;Ai为指向自树的指针,且Ai-1所指子树中所有的节点的关键字均小于Ki,An所指子树中所有节点的关键字均大于Kn,n为关键字的个数。1.设计并实现B-Trees数据结构,包含其上的基本操作,如节点的插入和删除等。2.实现在B-trees树上的
3、查找操作。3.设计良好的运行界面,能够实现重复的操作。 1.3 开发环境开发系统:Windows 系统,处理器要求最低奔腾处理器,内存32m,建议在i5处理器,128m内存配置下调试。编译集成软件:Devc+开发软件。Devc+是一个强大的C/C+软件开发工具,操作简单,使用非常广泛,称为很多程序员的首选开发工具。2概要设计 2.1 功能模块划分主函数即main()函数,主要实现B-Trees的建立,建立一棵满足要求的4节B-Trres树。菜单介绍函数即meau()函数,主要包括介绍各个功能的实现途径,并给操作者提供个操作界面。插入元素函数即insertbtree(b)函数,主要有用户通过界面
4、输入要插入的元素,首先判断要插入的元素是否已在B-Trees中,若不在则插入之。删除函数即deletetree(b)函数,首先判断要删除的元素是否在B-Trees中若在该B-Trees中则删除。查找函数即searchbtree(b)函数,由用户通过界面输入一个元素,查找该元素是否在该B-Trees中,若在就输出它在节点的位置。图2.1 主函数流程图2.2 系统流程图图2.2 主程序流程图B-树的主程序流程如图所示图2.3 主程序流程图3 详细设计3.1 数据结构B-树的数据类型:typedef struct BTNode int keynum; /结点中关键字的个数,即结点的大小 struct
5、 BTNode *parent; /指向双亲指针int keym+1; /关键字向量struct BTNode *ptrm+1; /子树指针向量BTNode 模块设计B-树插入新元素模块如图3.2所示。图3.2 B-树插入元素函数流程图B-树删除元素模块如图3.3所示。图3.3 B-树删除元素函数流程图B-树查找模块如图3.4所示。图3.4 B-树查找元素模块流程图B-树查找模块如图3.4所示。图 B-树查找元素模块流程图4 测试图表 4-1序号数据内容说明显示截图13查找,要查元素在B-树中25查找,要查元素不在B-树中332插入,插入元素不在B树中442插入,插入元素在B-树中561删除,
6、删除元素在B-树中651删除,删除元素不在B-树中界面主菜单运行结果如图4.1所示。图4.1 主界面运行查询B-树中元素运行结果分两种可能一是要查元素在B-树中,另一种是不在。要查元素在B-树中的运行结果如图4.2所示。图4.2 查找B-树已有元素要查不在元素在B-树中的运行结果如图4.3所示。图4.3 查找B-树中没有元素插入B-树中元素运行结果分两种可能一是要查元素在B-树中,另一种是不在。要插入的元素在B-树中的运行结果如图4.4所示。图4.4 插入B-树已有元素要插入的元素不在B-树中的运行结果如图4.5所示。图4.5 插入B-树中没有元素插入B-树中元素运行结果分两种可能一是要查元素
7、在B-树中,另一种是不在。要删除的元素在B-树中的运行结果如图4.6所示。图4.6 删除B-树中已有元素要删除的元素不在B-树中的运行结果如图4.7所示。图4.7 删除B-树中没有元素退出B-树中元素的运行结果如图4.8所示。图4.8 退出运行主界面5 总结历时两周的课程设计终于结束了,对于课程设计:首先,关于程序方面,我发现即使对设计思路有了眉目,知道了所要用到的B-树的一些知识,但是要把这些写成函数代码,其实还是一件非常不容易的事情。再加上要完善设计思路,构造整个程序框架在内,都是一件工作量非常大的工作。幸好,有很多资料可以在网路上搜到。所以课程设计的第一天,我们搜集了很多关于B-树的资料
8、,包括几种不同思路的程序代码,以及程序流程。然后我们的工作就变成:尽量看懂并整理这些代码,然后再其基础上筛选需要的功能,按照自己的意愿来修改与完善。在操作界面的人性化上,我倒尽可能的做得很完善,无论从美观角度还是方便清楚操作,都实行了非常人性化的方式。因为通常清楚程序的人,知道怎么操作以及该输入什么,而不清楚的人却有很大可能在细节方面输入错误导致程序运行失败,或是根本不知道应该怎么输入。所以,尽可能的人性化的设计是非常有必要的,让不懂程序的人也可以正确的操作运行。在调试程序的过程中,遇到了许多常识性的问题,通过不断的调试、改进,最终使程序能够运行,并且得到正确的运行结果。在这个过程中,能够不断
9、地发现问题,并且自己独立的去解决多遇到的问题,这是课程设计过程中所不可缺少的精神。 最后,做再次一下总结。程序方面仍有为解决的问题,希望即便课设之后也可以努力将问题解决掉。然后B-树的算法中,有些知道怎么做却很难清楚回答出来的问题,希望可以再好好的查找一下相关资料,将知识系统化、理论化、规范化。参考文献1顾泽元,刘文强编.数据结构.北京:北京航空航天大学出版社,2011年. 2李素若,陈万华,游明坤编.数据结构(C语言描述),中国水利水电出版社,2014年.3李素若,陈万华,游明坤编.数据结构习题解答及上机指导,中国水利水电出版社,2014年.4谭浩强编.C语言设计.清华大学出版社,2011年
10、. 附录 源程序代码#include #include #include #define m 4 /B-树的阶,设定为4 #define max 32767 typedef struct BTNode int keynum; /结点中关键字的个数,即结点的大小 struct BTNode *parent; /指向双亲指针int keym+1; /关键字向量struct BTNode *ptrm+1; /子树指针向量BTNode,*BTree; /定义B-树的节点结构int data20=3,24,45,27,53,90,50,61,70,100,12,37,85,105,108,113,121
11、,124,138,135; BTree T,R,R1; int rag; BTree searchtree(int k) /查找建树时要插入元素的位置 int j; BTree p1,q1; p1=T; while(p1) for(j=1;jkeyjk) break; q1=p1;p1=p1-ptrj-1; rag=j-1; return q1; void search(BTree p2,int a) int j; for(j=1;jkeyja) break; rag=j-1; void zimeau() /介绍菜单 printf(ttn); printf(tt菜单简介n); printf(t
12、tn); printf(tt1.查询结点信息n); printf(tt2.插入新的结点n); printf(tt3.删除结点n); printf(tt4.退出n); printf(ttn); int searchbtree(int k) /查询要查元素在树中,若树中有该元素则打印否则打印说明无 int i,found=0; BTree p; p=T; while(!found)&(p-ptr0!=NULL) for(i=1;im;i+) if(kkeyi) break; if(p-keyi=k) found=1; else p=p-ptri-1; if(p-ptr0=NULL) for(i=1
13、;im;i+) if(kkeyi) break; if(p-keyi=k) found=1; if(found=0) printf(tt此元素不在该B-树中n); else printf(tt此元素元素在该B-树中n); printf(tt该元素是B-树中结点的第%d元素n,i); return found; void insertbtree(int x) /插入元素函数 int j,finished,s; BTree q,p; finished=0; q=searchtree(x); /查找要插入元素在B-树中的位置while(!finished) if(q-keynum=0) /当要插入的
14、元素所在结点是根节点,且为新申请的根结点 q-ptr0=p;q-ptr1=R;q-key1=x; q-keynum+;p-parent=q;R-parent=q; else if(q-keynum!=0)&(q-ptr0!=NULL)/当要插入的元素所在结点是中间的结点x for(j=3;jrag;j-) q-keyj+1=q-keyj;q-ptrj+1=q-ptrj; q-ptrj+1=R;R-parent=q;q-keyj+1=x;q-keynum+; else /当插入的元素所在结点是最下层的结点时 for(j=3;jrag;j-) q-keyj+1=q-keyj; q-keyj+1=x
15、;q-keynum+; finished=0; if(q-keynumkeys;q-keys=max;q-keynum=s-1; R=(BTNode*)malloc(sizeof(BTNode); /新申请一个结点来存放分裂的另一部分数据R-key1=q-keys+1; for(j=2;jkeyj=max;R-ptrj=NULL; R-ptr0=q-ptrs;R-ptr1=q-ptrs+1; R-keynum=1;q-keys+1=max;p=q;q=q-parent; if(!q) R1=(BTNode*)malloc(sizeof(BTNode); /新申请一个节点作为根节点T=q=R1;
16、 q-keynum=0;q-parent=NULL; for(j=1;jkeyj=max; for(j=0;jptrj=NULL; else search(q,x); /在一个结点中查找要插入元素的位置 void deletetree1(BTree q,int j) /当要删除的节点是终端结点,j是要删除元素是节点的地几个元素 int i,h; BTree p,q0,q1; p=q-parent; for(h=0;hptrh=q) break; if(h=0) q1=p-ptrh+1; else q0=p-ptrh-1;q1=p-ptrh+1; if(q-keynum=m/2) /当节点的数目
17、不小于m/2 for(i=j;ikeyi=q-keyi+1; else if(q-keynumkeynum=2|q1-keynum=2) /当结点的数目少于m/2但其左兄弟或右兄弟的结点数目大于时 if(q1-keynum=m/2) /右兄弟时 q-keyj=p-keyh;p-keyh=q1-key0; for(i=0;ikeyi=q1-keyi+1; q1-keynum-; else /左兄弟时 q-keyj=p-keyh;p-keyh=q0-keyq0-keynum; q0-keyq0-keynum=q0-keyq0-keynum+1;q0-keynum-; else /当结点的数目少于m
18、/2且其左兄弟和右兄弟的结点数目小于时 if(h=0) /当该节点只有有兄弟时 q-key1=p-key1;q-key2=q1-key1;q-keynum=2;free(q1); for(i=1;ikeyi=p-keyi+1;p-keyi=p-keyi+1; p-keynum-; else /当该节点有左兄弟时 q-key1=p-keyh;q-key2=q0-key1;q-keynum=2;free(q0); for(i=1;ikeyi=p-keyi+1; p-ptri=p-ptri+1; p-keynum-; void deletetree2(BTree q,int j) /要插入节点是非终
19、端结点 BTree p; p=q; while(q-ptr0)/找终端结点q=q-ptrj; if(q-ptr0!=NULL) q=q-ptr0; q=q-parent;p-keyj=q-key1; deletetree1(q,1); void deletetree(int k) int i,found=0; BTree p; p=T; while(!found)&(p-ptr0!=NULL) /找到要插入节点的位置 for(i=1;im;i+) if(kkeyi) break; if(p-keyi=k) found=1; else p=p-ptri-1; if(p-ptr0=NULL) fo
20、r(i=1;im;i+) if(kkeyi) /找到要插入节点的位置break; if(p-ptr0=NULL) deletetree1(p,i); /当要删除元素是终端结点else deletetree2(p,i); /当插入节点不是终端结点 int searchbtree1(int k) /查询要删除元素是否在树中int i,found=0; BTree p; p=T; while(!found)&(p-ptr0!=NULL) for(i=1;im;i+) if(kkeyi) break; if(p-keyi=k)found=1; else p=p-ptri-1; if(p-ptr0=NU
21、LL) for(i=1;im;i+) if(kkeyi) break; if(p-keyi=k) found=1; /返回值,1代表该元素在B-树中可以删除否则无法删除return found; int rumeau() /提供给读者自己的选择 int c; printf(tttt请输入您的选择:); scanf(%d,&c); return c; void meau() /菜单选项函数 int a,b,rate; printf(tt%c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %cn,3,3,3,3,3,3,3,
22、3,3,3,3,3,3,3,3,3,3,3,3,3,3,3); do zimeau(); printf(tt%c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %c %cn,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3); a=rumeau(); /子菜单switch(a) case 1:system(cls); printf(tt请输入要查找的元素:); scanf(%d,&b); rate=searchbtree(b); /在B-树中查找元素函数break; case 2:syst
23、em(cls); printf(tt请输入要插入的元素:); scanf(%d,&b); rate=searchbtree(b); /查询要插入的元素是否在该B-树中if(rate=0) printf(tt该元素不在此B-树中,故可插入之); insertbtree(b); /插入新元素函数 else printf(tt该元素已在B-树中,不需要再插入n); break; case 3:system(cls); printf(tt请输入要删除的元素:); scanf(%d,&b); rate=searchbtree1(b); if(rate=0) printf(tt由于该元素不在此B-树中,故
24、无法删除n); else printf(tt该元素在此B-树中,可删除n); deletetree(b); /删除B-树中的元素调用函数 break; while(a!=4); void main() int x,i,finished,s,j; BTree q,p; system(color 1B); /背景颜色显示函数T=(BTNode*)malloc(sizeof(BTNode);T-keynum=0; for(i=0;ikeyi+1=datai;T-keynum+; T-key4=max; for(i=0;iptri=NULL; T-parent=NULL; for(i=3;ikeynum=0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年新车销售与二手车置换服务合同模板3篇
- 二零二五年度旅游文化产品开发与销售合同4篇
- 2025年度饲料行业信息化建设与系统集成合同
- 二零二五年度公租房住房租赁合同范本
- 2025年度展览展示空间装修合同
- 二零二五年度经济补偿协议书-合同解除经济补偿协议
- 2025年度煤矿自卸车零配件供应与维修服务合同3篇
- 专利合同转让协议书范本(2024版)
- 二零二五年度电子商务企业品牌保护劳动合同
- 二零二五年度草原畜牧业发展草牧场承包合同范本3篇
- 南充化工码头管网施工方案(初稿)
- 2023年消防接警员岗位理论知识考试参考题库(浓缩500题)
- GB/T 30285-2013信息安全技术灾难恢复中心建设与运维管理规范
- 鲁滨逊漂流记阅读任务单
- 第一章 运营管理概论1
- 《创意绘画在小学美术教育中的应用(论文)6000字》
- 主体结构验收汇报材料T图文并茂
- 管理学原理(南大马工程)
- 过一个有意义的寒假课件
- 施工现场装配式集装箱活动板房验收表
- 电力业扩工程竣工验收单
评论
0/150
提交评论