- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程设计_二叉排序树的实现
课 程 设 计 课程名称 数据结构课程设计 题目名称 二叉排序树的实现 学生学院 应用数学学院 专业班级 信息计算1 班 学 号 3114008104 学生姓名 陈辉腾 指导教师 刘志煌 2016年6月27日二叉排序树的实现应数 14信计1班 3114008104 陈辉腾课程设计要求:二叉排序树的实现二叉排序补充概念(也可以参考书上第九章第二节)左子树的数据总是小于根和右子树的数据,这种就叫做二叉排序树,简单一点,二叉排序树左边的数据小于右边.1)编程实现二叉排序树, 包括生成、插入,删除;2)对二叉排序树进行先根、中根、 和后根非递归遍历;3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。例如,a 为根,左右孩子是 bc,b 的孩子是 de,c 的孩子是 fg. 也可以像这样更加美观:也可以是竖着显示,a 为根,bc 为孩子.4)分别用二叉排序树和数组去存储一个班(50 人以上)的成员信息(至少包括学号、姓名、成绩 3 项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么?5) 格式就要按照我们作业的要求,对数据测试,分析,总结和改进的工作要做的详细一点。1、编程实现二叉排序树, 包括生成、插入、删除;1.1数据类型定义1.2生成一颗二叉排序树方法一:手工输入,递归生成。生成一颗二叉排序树如下:这样生成一棵二叉排序树,就是要自己判断每个结点应该放在什么地方,因为二叉排序树规定了二叉排序树左边的数据小于右边。显然,这样每次构建一棵二叉排序树都需要事先规定好一个数据元素序列,然后依次输入。这样的弊端就是你不细心一点就有可能构建出一棵错误的二叉排序树——非二叉排序树。优点就是可以构建自己想要的二叉排序树。方法二:随机生成。这里用到了C++里面的rand()函数,用于生成大于等于0的伪随机数(每次运行产生的随机数都是固定的)。用这个函数需要使用名字空间using namespace std;同时引进#includerandom。思路是:按依次插入结点来生成一棵二叉排序树,在插入函数里进行判断:即编写生成二叉排序树的规则。另外,事先要有一堆结点(用于生成二叉排序树),我是事先保存在一个数组里。然后每次产生一个伪随机数(范围是0到数组长度)作为数组下标,并把对应的该下标的数组元素插入到要生成的二叉排序树里。其中for循环次数就是生成二叉排序树结点个数的最大值减1。最大是因为产生的伪随机数可能会重复,而重复的结点不再插入树中。减1是因为根结点我事先就定义了,它的data默认为30,默认为30的目的是因为我可以产生0—64的伪随机数,学号范围也是暂时定在0—64这个范围。这样规定可以照顾生成的左右子树尽量均衡,即靠近完全二叉排序树。要靠近完全二叉树是因为到时打印一颗树的时候,打印的层数(树的深度)尽量少,因为到时候打印一棵树,深度越大就越难控制。(当然也可以把上述函数的2,3,4行注释起来,这样就要保证T一开始是空树。)其中InsertBST()函数为:在插入一个结点的函数里,首先要找一下原树里有没有与即将被插入的结点元素相同的结点元素。有的话就放弃插入,没有就进行与根结点判断大小,小就插到它的左边作为左孩子,大的就到右边。 其中查找函数SearchBST()为:查找函数是递归定义,同时也用到了比较函数LT(a,b)。LT(a,b)比较函数定义如下:在比较函数里又用到了字符串比较函数strcmp(a,b)。这个函数c++里面有,只要#includestring.h就行了。但是它比较的是字符串。由于对于我来说我的关键字是学号,比较的就是学号,所以我用比较数值型的比较函数就够了(学号暂时用两位数,因为打印树的时候占用位置少,还有就是用整形int可以存得下)。于是自己写了比较函数。即:函数名字忘记改了,不能见名知义,不过没关系了。运行结果:经过验证,是成功的生成了一棵二叉排序树。for循环了8次,此时生成了9个结点,说明产生的伪随机数没有重复,而且随机构造的树也基本左右均衡。1.3对生成的二叉排序树插入一个节点生成了一棵二叉排序树,接下来对它插入一个结点。(其实生成树时一直在插入,不过还是做一下验证一下。由于产生的是伪随机数,所以运行结果和上次一样)插入关键字(学号)为27的结点后,它已成功接到关键字为26的结点右边作为其右孩子。并以树的形状打印出来。所以,插入结点是成功的。1.4对生成的二叉排序树删除一个结点对二叉排序树进行删除操作,删除函数代码为:此函数也是递归调用。其中EQ()函数和LT()函数上面有说明。这里关键是Delete()函数,定义如下:在原来树插入结点27后,删除结点54的运行结果为:所以,由遍历结果和打印结果知,删除是成功的。2、对二叉排序树
您可能关注的文档
- 数据结构习题库.doc
- 数据结构习题集.doc
- 数据结构二叉排序树哈希表.doc
- 数据结构优先队列链表实现.doc
- 数据结构作业.docx
- 数据结构作业.doc
- 数据结构作业一.doc
- 数据结构作业二.doc
- 数据结构入门.doc
- 数据结构典型习题.doc
- 2024年河南省漯河市源汇区阴阳赵乡招聘社区工作者真题及参考答案详解1套.docx
- 2024年河南省濮阳市濮阳县清河头乡招聘社区工作者真题附答案详解.docx
- 人教版一年级数学上册数学游戏第3课时 在教室里认一认.pptx
- 人教版数学一年级下册四 100以内的口算加、减法第1课时 口算减法(1).pptx
- 人教版一年级数学上册 第4单元 11~20的认识第2课时 11~20的认识(1).pptx
- 人教版数学一年级下册三 100以内数的认识第5课时 数的顺序.pptx
- 2025 入党积极分子预备党员考试题库(附答案).docx
- 关于入党积极分子预备党员应知应会题库(附答案).pdf
- 关于入党积极分子预备党员应知应会题库(附答案).docx
- 2025 入党积极分子预备党员考试题库(附答案).pdf
文档评论(0)