ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:169.38KB ,
资源ID:22064001      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22064001.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(B树课程设计Word下载.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

B树课程设计Word下载.docx

1、1. 设计并实现 B-Trees 数据结构,包含其上的基本操作,如节点的插入和删除等。2.实现在 B-trees 树上的查找操作。3.设计良好的运行界面,能够实现重复的操作。1.3 开发环境开发系统: Windows 系统,处理器要求最低奔腾处理器,内存 32m,建议在 i5 处理器, 128m内存配置下调试。编译集成软件: Devc+开发软件。Devc+是一个强大的 C/C+软件开发工具,操作简单,使用非常广泛, 称为很多程序员 的首选开发工具。2概要设计2.1功能模块划分主函数即 main() 函数,主要实现 B-Trees 的建立,建立一棵满足要求的 4 节 B-Trres 树。菜单介绍

2、函数即 meau()函数,主要包括介绍各个功能的实现途径,并给操作者提供 个操作界面。插入元素函数即 insertbtree(b) 函数,主要有用户通过界面输入要插入的元素,首先 判断要插入的元素是否已在 B-Trees 中,若不在则插入之。删除函数即 deletetree(b) 函数,首先判断要删除的元素是否在 B-Trees 中若在该B-Trees 中则删除查找函数即 searchbtree(b) 函数,由用户通过界面输入一个元素,查找该元素是否在 该 B-Trees 中,若在就输出它在节点的位置。图 2.1 主函数流程图2. 2 系统流程图B- 树的主程序流程如图 2.2 所示B- 树的

3、主程序流程如图 2.3 所示3详细设计3.1数据结构B-树的数据类型:typedef struct BTNodeint keynum; / 结点中关键字的个数,即结点的大小 struct BTNode *parent; / 指向双亲指针int keym+1; / 关键字向量struct BTNode *ptrm+1; / 子树指针向量BTNode3.2模块设计 B-树插入新元素模块如图 3.2 所示树插入元素函数流程图B-树删除元素模块如图 3.3 所示图 3.3 B- 树删除元素函数流程图B-树查找模块如图 3.4 所示图 3.5 B- 树查找元素模块流程图4测试4.1 测试数据图表 4-1

4、序号数据内容说明显示截图13查找,要查元素在 B- 树中图 4.225查找,要查元素不在 B- 树中图 4.332插入,插入元素不在 B 树中图 4.4442插入,插入元素在 B- 树中图 4.561删除,删除元素在 B-树中图 4.6651删除,删除元素不在 B- 树中图 4.74.2测试结果界面主菜单运行结果如图 4.1 所示图 4.1 主界面运行查询 B-树中元素运行结果分两种可能一是要查元素在 B-树中,另一种是不在要查元素在 B-树中的运行结果如图 4.2 所示图 4.2 查找 B- 树已有元素要查不在元素在 B- 树中的运行结果如图 4.3 所示图 4.3 查找 B- 树中没有元素

5、插入 B-树中元素运行结果分两种可能一是要查元素在 B-树中,另一种是不在 要插入的元素在 B- 树中的运行结果如图 4.4 所示。图 4.4 插入 B- 树已有元素要插入的元素不在 B-树中的运行结果如图 4.5 所示。图 4.5 插入 B- 树中没有元素插入 B-树中元素运行结果分两种可能一是要查元素在 B-树中,另一种是不在 要删除的元素在 B- 树中的运行结果如图 4.6 所示。图 4.6 删除 B- 树中已有元素图 4.8 退出运行主界面5总结 历时两周的课程设计终于结束了,对于课程设计: 首先,关于程序方面,我发现即使对设计思路有了眉目,知道了所要用到的 B-树的一些知识,但是要把

6、这些写成函数代码,其实还是一件非常不容易的事情。再加上要完善设 计思路,构造整个程序框架在内,都是一件工作量非常大的工作。幸好,有很多资料可以在网路上搜到。所以课程设计的第一天,我们搜集了很多关于 B-树的资料,包括几种不同思路的程序代码,以及程序流程。然后我们的工作就变成:尽量看懂并整理这些代码,然后再其基础上筛选需要的功能,按照自己的意愿来修改与完善在操作界面的人性化上,我倒尽可能的做得很完善,无论从美观角度还是方便清楚操 作,都实行了非常人性化的方式。因为通常清楚程序的人,知道怎么操作以及该输入什么, 而不清楚的人却有很大可能在细节方面输入错误导致程序运行失败,或是根本不知道应该 怎么输

7、入。所以,尽可能的人性化的设计是非常有必要的,让不懂程序的人也可以正确的 操作运行。在调试程序的过程中,遇到了许多常识性的问题,通过不断的调试、改进,最终使程 序能够运行,并且得到正确的运行结果。在这个过程中,能够不断地发现问题,并且自己 独立的去解决多遇到的问题,这是课程设计过程中所不可缺少的精神。最后,做再次一下总结。程序方面仍有为解决的问题,希望即便课设之后也可以努力 将问题解决掉。然后 B-树的算法中,有些知道怎么做却很难清楚回答出来的问题,希望可 以再好好的查找一下相关资料,将知识系统化、理论化、规范化。参考文献1顾泽元,刘文强编 . 数据结构. 北京:北京航空航天大学出版社, 20

8、11年.2李素若,陈万华,游明坤编 .数据结构( C语言描述),中国水利水电出版社, 2014 年.3李素若,陈万华,游明坤编 . 数据结构习题解答及上机指导,中国水利水电出版社, 2014年.4谭浩强编 .C 语言设计 . 清华大学出版社, 2011 年.附录 源程序代码#include #includestdlib.h#define m 4 /B- 树的阶,设定为 4#define max 32767 / 结点中关键字的个数,即结点的大小struct BTNode *parent;BTNode,*BTree; / 定义 B- 树的节点结构int data20=3,24,45,27,53,9

9、0,50,61,70,100,12,37,85,105,108,113,121,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)j+) if(p2-a)break;void zimeau() / 介绍菜单printf(ttn);tt 菜单简介 ntt1. 查询结点

10、信息 ntt2. 插入新的结点 ntt3. 删除结点 ntt4. 退出 nint searchbtree(int k) / 查询要查元素在树中,若树中有该元素则打印否则打印说明无int i,found=0;BTree p;p=T;while(!found)&(p-ptr0!=NULL)for(i=1;ii+) if(kkeyi) break;if(p-keyi=k)found=1;elsep=p-ptri-1;ptr0=NULL) for(i=1;if(found=0)tt 此元素不在该 B- 树中 ntt 此元素元素在该 B- 树中 ntt 该元素是 B- 树中结点的第 %d元素 n,i);

11、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) / 当要插入的元素所在结点是根节点 , 且为新申请的根结点q-ptr0=p;ptr1=R;key1=x; q-keynum+;p-parent=q;R-else if(q-keynum!=0)&(q-=NULL) / 当要插入的元素所在结点是中间的结点 x for(j=3;jrag;j-) key

12、j+1=q-keyj;ptrj+1=q-ptrj; q-ptrj+1=R;keyj+1=x;else / 当插入的元素所在结点是最下层的结点时j-) q-keynumkeys;keys=max;keynum=s-1;R=(BTNode*)malloc(sizeof(BTNode); / 新申请一个结点来存放分裂的另一部分数据 R-key1=q-keys+1;for(j=2;=m;j+) R-keyj=max;ptrj=NULL; R-ptr0=q-ptrs;ptr1=q-ptrs+1;keynum=1;keys+1=max;p=q;q=q-parent;if(!q)R1=(BTNode*)ma

13、lloc(sizeof(BTNode); / 新申请一个节点作为根节点 T=q=R1;keynum=0;parent=NULL;j+) q-for(j=0; elsesearch(q,x); / 在一个结点中查找要插入元素的位置void deletetree1(BTree q,int j) / 当要删除的节点是终端结点 ,j 是要删除元素 是节点的地几个元素int i,h;BTree p,q0,q1; p=q-for(h=0;hptrh+1;q0=p-ptrh-1;keynum=m/2) / 当节点的数目不小于 m/2for(i=j;i+) q-keyi=q-keyi+1;if(q-m/2)&

14、(q0-=2|q1-=2) / 当结点的数目少于 m/2 但其左兄弟或右兄弟的结点数目大于时if(q1-=m/2) / 右兄弟时 q-keyj=p-keyh;keyh=q1-key0; for(i=0;i+)q1-keyi=q1-keynum-;else / 左兄弟时keyh=q0-keyq0-keynum; q0-keynum=q0-keynum+1;q0-else / 当结点的数目少于 m/2 且其左兄弟和右兄弟的结点数目小于时if(h=0) / 当该节点只有有兄弟时key1=p-key1;key2=q1-keynum=2;free(q1); for(i=1;keyi=p-else / 当

15、该节点有左兄弟时key2=q0-free(q0);ptri=p-ptri+1;void deletetree2(BTree q,int j) / 要插入节点是非终端结点while(q-ptr0) / 找终端结点=NULL)ptr0;keyj=q-deletetree1(q,1);void deletetree(int k)=NULL) / 找到要插入节点的位置if(kB-树中可以删除否则 / 返回值, 1 代表该元素在 无法删除 return found;int rumeau() / 提供给读者自己的选择int c; printf(tttt 请输入您的选择: scanf(%d,&c);retu

16、rn c;void meau() / 菜单选项函数int a,b,rate;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);dozimeau();,3a=rumeau(); / 子菜单 switch(a)case 1:system(clstt 请输入要查找的元素 :b);rate=searchbtree(b); / 在 B- 树中查找元素函数 break;case 2:tt 请输入要插入的元素 :scanf( / 查询要插入

17、的元素是否在该 B- 树中 if(rate=0)tt 该元素不在此 B- 树中,故可插入之 insertbtree(b); / 插入新元素函数tt 该元素已在 B- 树中,不需要再插入 n break;case 3:tt 请输入要删除的元素 : rate=searchbtree1(b);if(rate=0)tt 由于该元素不在此 B- 树中,故无法删除 n else printf(tt 该元素在此 B- 树中,可删除 n deletetree(b); / 删除 B- 树中的元素调用函数while(a!=4);void main()int x,i,finished,s,j;color 1B / 背景颜色显示函数T=(BTNode*)malloc(sizeof(BTNode);T-for(i=0;3;keyi+1=datai;key4=max;5;ptri=NULL;for(i=3;20;x=datai;j-)q-m) / 当插入节点后,结点的关键字数小于 m时 , 插入新的元素完成/ 当插入新的结点后,结点的关键字数不小于 m时将结点分裂R-if(R-ptr0-parent=R;ptr1-ptrs=NULL;ptrs+

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1