收藏 分享(赏)

内蒙古科技大学 数据结构课程设计 二叉排序树的基本操作.pdf

上传人:精品资料 文档编号:10777671 上传时间:2020-01-08 格式:PDF 页数:22 大小:543.42KB
下载 相关 举报
内蒙古科技大学 数据结构课程设计 二叉排序树的基本操作.pdf_第1页
第1页 / 共22页
内蒙古科技大学 数据结构课程设计 二叉排序树的基本操作.pdf_第2页
第2页 / 共22页
内蒙古科技大学 数据结构课程设计 二叉排序树的基本操作.pdf_第3页
第3页 / 共22页
内蒙古科技大学 数据结构课程设计 二叉排序树的基本操作.pdf_第4页
第4页 / 共22页
内蒙古科技大学 数据结构课程设计 二叉排序树的基本操作.pdf_第5页
第5页 / 共22页
点击查看更多>>
资源描述

1、 内蒙古科技大学 本科生课程设计论文 题 目: 二叉排序树的操作 学生姓名:陈伟光 学 号: 1567159118 专 业:软件工程 班 级: 15 软件一班 指导教师:康懿 2017 年 1 月 6 日 内蒙古科技大学课程设计论文 ii 内蒙古科技大学课程设计任务书 课程名称 数据结构课程设计 设计题目 二叉排序树的操作 指导教师 康懿 时间 2016-2017 秋 学期 1 月 2 日 6 日 一、教学要求 1. 掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力 2. 初步掌握软件开发过程 的问题分析、系统设计、程序编码、测试等基本方法和技能 3. 提高综合运用所学的理论知识和方

2、法独立分析和解决问题的能力 4. 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风 二、设计资料及参数 每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。 二叉排序树的操作 以二叉链表表示二叉排序树,在此基础上实现二叉排序树的操作。 要求设计类(或类模板)来描述二叉排序树,包含必要的构造函数和析构函数,以及其他能够完成如下功能的成员函数: 创建二叉 排序树 输出二叉排序树 在二叉排序树中查找给定值 在二叉排序树中插入新结点 在二叉排序树中删除给定值 并设计主函数测试该类(或类模板)。 三、设计要求及成果 1. 分析课程设计

3、题目的要求 2. 写出详细设计说明 3. 编写程序代码,调试程序使其能正确运行 4. 设计完成的软件要便于操作和使用 5. 设计完成后提交课程设计报告 四、进度安排 资料查阅与讨论( 1 天) 系统分析( 2 天) 系统的开发与测试( 5 天) 编写课程设计说明书和验收( 2 天) 五、评分标准 1. 根据平时上机考勤、表现和进度, 教师将每天点名和检查 2. 根据课程设计完成情况,必须有可运行的软件。 3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。 4. 根据答辩的情况,应能够以清晰的思路和准确、简练的语言叙述自己的设计和回答教师的提问 六、建议参考资料 1 数据结

4、构 ( C 语言版)严蔚敏、吴伟民 主编 清华大学出版社 2004.11 2数据结构课程设计案例精编(用 C/C+描述),李建学 等 编著,清华大学出版社 2007.2 3. 数据结构 :用面向对象方法与 C+语言描述,殷人昆 主编, 清华大学出版社 2007.6 内蒙古科技大学课程设计论文 iii 目录 第 1 章 需求分析 . 1 第 2 章 总体设计 . 2 第 3 章 抽象数据类型定义 . 3 3.1 BSTNode 抽象数据类型的设计 3 3.2 BST 抽象数据类型的设计 . 3 第 4 章 详细设计 . 5 4.1 工程视图 5 4.2 类图视图 5 4.3 函数的调用关系 5

5、4.4 主程序流程图 6 4.5 主要算法的流程图 7 第 5 章 测试 . 8 第 6 章 总结 11 附录: 程序代码 . 12 参考文献 . 19 第 1章 需求分析 每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。 二叉排序树的操作 以二叉链表表示二叉排序树,在此基础上实现二叉排序树的操作。 要求设计类(或类模板)来描述二叉排序树,包含必要的构造函数和析构函数,以及其他能够完成如下功能的成员函 数: 创建二叉排序树 输出二叉排序树 在二叉排序树中查找给定值 在二叉排序树中插入新结点 在二叉排序树中删除给定值 并设计主函数测试该类(或类模板)。 通过算法的需

6、求,确定算法的主要模块(建立并输出二叉树、插入结点、删除结点、查找结点、以及主函数模块)对各模块再进行函数的选取与构造,以及变量的控制等。最后,再将各模块结合,形成完整的算法,注意全局变量的选择。 内蒙古科技大学课程设计论文 2 第 2章 总体设计 系统功能包括: 二叉排序树 的 创建 , 二叉排序树 的 中序遍历 , 节点插入 , 节点删除 , 节点查询 总 体设计框架图,如图 2.1 所示: 图 2.1 总体设计框架 系统功能 选择 程序 创建二叉树 节点 遍历 查询节点 删除节点 插入节点 内蒙古科技大学课程设计论文 3 第 3章 抽象数据类型定义 定义格式如下: 3.1 BSTNode

7、 抽象数据类型的设计 typedef struct BSTNode int data; struct BSTNode *lchild, *rchild; BSTnode, *BSTree; 图 3.1 BSTNode 抽象数据类型设计视图 对 结构体 BSTNode 的说明: BSTNode 为 程序中 节点 的 数据 内容 , 主要包含 的 数据有 3 个 : 1. Int 类型的 data 变量 , 表示节点 存放的 整型 数据 2. 结构体 类型 的 lchild 指针 , 指向 左孩子 节点 3. 结构体 类型的 rchild 指针 , 指向 右 孩子 节点 3.2 BST 抽象数据类

8、型的设计 class BST public: void menu(); BSTree Create(); BSTree Insert(BSTree T, int key); void Traverse(BSTree T); bool Search(BSTree T, int key); 内蒙古科技大学课程设计论文 4 void Delete(BSTree T, int key); ; 图 3.2 BST 抽象数据类型的设计 对 类 BST 的说明: BST 类 主要负责 二叉树 的 整体 操作 ,包括 6 个 public 权限 的 成员函数 实现 5 个 功能 : 1. BSTree Cre

9、ate 为 创建 二叉树 并且 录入 数据 元素 。 2. BSTree Insert 为 插入 新的 节点 ,并且 录入 新结点 的 信息 3. void Traverse 为 中序 遍历 二叉树 的 所有数据元素 的 值 4. bool Search 为 根据 数据值 查询节点 长度 5. void Delete 为 删除 节点 6. void menu 为 选择 界面 不 实现 任何 其他功能 内蒙古科技大学课程设计论文 5 第 4章 详细设计 4.1 工程视图 图 4.1 工程视图 4.2 类图视图 图 4.2 类图视图 4.3 函数的调用关系 如下图 4.3 所示 : 内蒙古科技大学

10、课程设计论文 6 图 4.3 函数的调用关系 4.4 主程序流程图 主程序流程图如图 4.4 所示: main()主程序 选择 a.menu() 开始 调用 menu: 创建 BST 类对象 b 选择功能执行 二叉树创建 插入 删除 遍历 查找 显示操作结果 是否继续 结束 输出二叉树 b.Traverse(BSTree T) 查找 b. Search(BSTree T, int key) 删除 b. Delete(BSTree T, int key) 插入 b. Insert(BSTree T, int key) 内蒙古科技大学课程设计论文 7 图 4.4 主程序流程图 程序的主要模块,对流

11、程图中出现的模块说明 *建立二叉树,用插入函数依次插入用户输入的序列 *结点的输出,中序遍历并输出显示 *结点的插入,运用递归算法进行结点的插入 *结点的删除,是该算法中较为复杂的一个模块,需判定用户输入的结点是根,还是叶子,这关系到删除的结点在序列中的位置 *结点的查找,在根指针所指二叉排序树中递归查找关键字等于 data 的数据元素; 若成功,返回指向该数据元素结点 的指针 ,否则返回空指针; 4.5 主要算法的流程图 主要所发流程图如图 4.5 所示: 图 4.5 主程序算法流程图 开始 a 调用 menu 选择功能 b.Insert(T, key) b.Delete(T, key) b

12、.Search(T, key) b.Traverse(T) 结束程序 b.Create() b.Exit() 内蒙古科技大学课程设计论文 8 第 5章 测试 1.调用 menu 函数 主界面 图 5.1 menu 的调用 2.调用 Create 函数 创建 二叉 树 图 5.2 创建二叉树 录入 方式 为 输入 正 整 型 数字 后 空格 ,结束 输入 时 输入 -1,即可 录入 二叉排序 树 3.调用 Traverse 遍历 图 5.3 遍历输出二叉树 内蒙古科技大学课程设计论文 9 便利方式 为 中序 遍历 ,遍历结果 即 从小到大 排列 4.调用 Insert 函数 实现 插入 操作 图

13、 5.4 在二叉树中插入节点 直接 输入 新的 要插入 的 数值 即可 完成 插 入操作 5.调用 Delete 函数 实现 删除操作 图 5.5 在二叉树中删除节点 直接输入 需要删除 的 数值 即 可 自动 删除 该 数值 所在 节点 图 5.6 删除 不存在 数值 如果 该数值 不存在 ,会提醒 没有此节点 ,不能删除 6.调用 Search 函数 实现 查询函数 内蒙古科技大学课程设计论文 10 图 5.7 在二叉树中查找节点 输入 需要 查找 的 值 , 会 输出 查找 结果信息 以及 它在 二叉树中的 长度 内蒙古科技大学课程设计论文 11 第 6章 总结 整个设计通过了软件和硬件

14、上的调试。我想这对于自己以后的学习和工作都会有很大的帮助。在这次设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。一切问题必须要靠自己一点一滴的解决,而在解决的过程 当中你会发现自己在飞速的提升。对于教材管理系统,其程序是比较简单的,主要是解决程序设计中的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对

15、系统的结构很熟悉。因此可以说系统的设计是软件和硬件的结合,二者是密不可分的。通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一 番努力才得以解决。 这 也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。其次,这次课程设计让我充分认识到团队合作的重要性,只有分工协作才能保证整个项目的有条不絮。另外在课程设计的过程中,当我们碰到不明白的问题时,指导老师总是耐心的讲解,给我们的设计以极大的帮助,使我们获益匪浅。因此非常感谢老师的教导。通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚

16、持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。我觉得作为一名软件工程专业的学生,这次课程设计 是很有意义的。更重要的是如何把自己平时所学的东西应用到实际中。虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这一个多礼拜的“学习”,在小组同学的帮助和讲解下,渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。 我 认为这个收获应该说是相当大的。一开始我们从参考书上找来了课题,但是毕竟是参考书,做到后来发现很多程序都是不完整的,这让我们伤透了脑筋。 参考书毕竟只是一个参考,设计这种东西最后还是

17、要靠自己动脑筋。然后我们大家一起齐心协力,从平时做的实验老师上课的举例书本上的知识以及老师的辅导和其他同学的帮助下终于完成了。 所以我认为这次的课程设计意义很深,和其他 4 位同学的共同学习配合努 力的过程也很愉快,另外还要感谢老师的耐心辅导。 内蒙古科技大学课程设计论文 12 附录: 程序代码 #include using namespace std; typedef struct BSTNode int data; struct BSTNode *lchild, *rchild; BSTnode, *BSTree; class BST public: void menu(); BSTree

18、 Create(); BSTree Insert(BSTree T, int key); void Traverse(BSTree T); bool Search(BSTree T, int key); void Delete(BSTree T, int key); ; BSTree BST:Create() int key; BSTree T = NULL; coutkey; while(key != -1) T = Insert(T, key); cinkey; return T; BSTree BST:Insert(BSTree T, int key) BSTree p = T; BST

19、ree f,s; 内蒙古科技大学课程设计论文 13 while(p != NULL) f= p; if(key = p-data) cout p-data)? p-rchild:p-lchild; s = new BSTnode; s - data = key; s - lchild = NULL; s - rchild = NULL; if(T = NULL) return s; if(key data) f - lchild = s; else f - rchild = s; return T; void BST:Traverse(BSTree T) /中序遍历 if(T) Travers

20、e(T-lchild); coutdatarchild); bool BST:Search(BSTree T, int key) BSTree p = T; int i=1; if(p=NULL) 内蒙古科技大学课程设计论文 14 printf(“请先创建二叉树,在进行查找操作 !“); return false; while(p) if(key = p-data) cout data)?(p-lchild):(p-rchild); return false; void BST:Delete(BSTree T, int key) /删除指定的节点 BSTree p = T,q,f,s; whi

21、le(p) /先寻找到要删除的节点 if(key = p-data) break; f = p; p=(keydata)?p-lchild:p-rchild; if(!p) coutlchild if(p = f-lchild) f-lchild = NULL; else f-rchild = NULL; delete p; p = NULL; else if(!p-lchild else f-rchild = p-rchild; delete p; p = NULL; else if(!p-rchild else f-rchild = p-lchild; delete p; p = NULL

22、; else q = p; s = p-lchild; while(s-rchild) q = s; s = s-rchild; 内蒙古科技大学课程设计论文 16 p-data = s-data; if(q!=p) q-rchild=s-lchild; else q-lchild = s-lchild; delete s; s = NULL; void BST:menu() system(“title 二叉排序树的演示 “); system(“color 0E“); system(“date /T“); BST b; int choice1, choice2, key; BSTree T =

23、NULL; coutchoice1; switch(choice1) case 1: 内蒙古科技大学课程设计论文 17 T = b.Create(); coutkey; if(b.Search(T, key) coutchoice2; switch(choice2) case 1: T = b.Insert(T, key); coutkey; T = b.Insert(T, key); coutkey; b.Delete(T, key); cout“删除完成 “endl; break; case 5: cout“-中序遍历的结果如下 -“endl; b.Traverse(T); cout“n“

24、; break; while(choice1 != 0); cout“n“; cout“-演示完毕 -“n“; system(“pause“); void main() BST a; a.menu(); 内蒙古科技大学课程设计论文 19 参考文献 : 1. 数据结构( C 语言版) 高等教育出版社 胡学纲编著 2. 数据结构与算法 高等教育出版社 许卓群、杨东青编著 3. 新编考研辅导丛书 数据结构辅导 西安电子科技大学出版社 王卫东编著 4. 数据结构 人民邮电出版社 刘遵仁编著 5. 数据结构( C 语言版)导教、导学、导考 西北工业大学出版社 姚群 编著 6. 数据结构( C 语言描述) 清华大学出版社 徐孝凯、贺桂英编著 7. 数据结构( C 语言描述)学习指导与习题解析 清华大学出版社 贺桂英编著 8. 数据结构(含实训) 东南大学出版社 齐景嘉编著

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报