二叉排序树的操作课程设计报告
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
然后返回主菜单。 BSTree *SearchKey(root,key) 初始条件:二叉排序树不为空,存在根节点; 操作结果:输入一个字符型数据,先寻找二叉排序树中是否有此数 据的,有则返回次数据项的地址给指针变量,没有则就返回该数据按照 二叉排序树规则,应该插入位置的父节点地址。 void DeleteKey(root,key); 初始条件:二叉排序树不为空,存在根节点; 操作结果:输入一个字符型数据,调用BSTree *SearchKey(root,key)函数,先寻找二叉排序树中是否有此数据的,有 则返回次数据项的地址给指针变量,然后就此节点的特征分为四类:删 除叶子节点;删除只有右孩子的节点;删除只有左孩子的节点;删除左 右孩子都有的节点,根据结点类型进入不同删除模块,删除结点,修改 相应二叉树结点指针,返回主菜单;没有则就返回提示语句“没有找到 该数据”。 void ChainTree_LDR(root) 初始条件:二叉排序树不为空,存在根节点; 操作结果:按照中序遍历并输出有序的数据序列。 } ADT BT
.4 功能需求
创建二叉排序树 输出二叉排序树 在二叉排序树中查找给定值 在二叉排序树中插入新结点 在二叉排序树中删除给定值 并设计主函数测试该类(或类模板)。
.5 任务计划
主程序流程图 算法:主程序主要用运了switch结构,使得主程序更加方便的调用成员 函数,各个成员函数间的关系也清晰明了。
输入与功能相对应的序号 执行功能 是否存在 开始 结束
.2 添加模块设计
if(root==NULL) { cout<<"空树!!!禁止操作!!!"; cout<<endl; } else{ cout<<"请输入你要添加的结点数目:"; cin>>n; fflush(stdin); for(i=0;i<n;i++) { cout<<"请输入你要添加的结点数据:"; cin>>key; a.Inserter(root,key); fflush(stdin); } }
.5 删除模块设计
if(root==NULL)
{ cout<<" 空树!!!禁止操作!!!"; cout<<endl; } else{ cout<<"请输入你要删除的结点数据:"; fflush(stdin); cin>>key1; a.DeleteKey(root,key1); cout<<endl; }
void ChainTree_LDR(BSTree *bt); };
第3章 详细设计
.1 输入模块设计
BSTree* BT::InitRoot() { BST node; if(node=new BSTree) { cout<<" 输入根节点的数据:"; cin>>node->data; node->left=NULL; node->right=NULL; node->father=NULL; return node; } }//初始化根节点
三、设计要求及成果
1. 2. 3. 4. 5. 分析课程设计题目的要求 写出详细设计说明 编写程序代码,调试程序使其能正确运行 设计完成的软件要便于操作和使用 设计完成后提交课程设计报告 资料查阅与讨论(1天) 系统分析(2天) 系统的开发与测试(5天) 编写课程设计说明书和验收(2天)
四、进度安排
第4章 测试分析
.1 测试程序执主界面输入1,进入“设置二叉排序树根节点”功能,按提示输入根节 点数据,结束到主界面。
添加二叉排序树结点: 在主界面时,输入2,进入“添加二叉排序树结点”功能。 先进行判空操作,若二叉排序树为空,给出提示:
否则按提示输入要添加的结点数目,并依此添加节点数据:
5
第一章 需求分析
.1 引言
二叉排序树的操作
.2 任务概述
以二叉链表表示二叉排序树,在此基础上实现二叉排序树的操作。
.3 数据描述
以二叉链表表示二叉排序树,在此基础上实现二叉排序树的 操作。 要求设计类(或类模板)来描述二叉排序树,包含必要的构 造函数和析构函数,以及其他能够完成如下功能的成员函数: ADT BT{ 数据对象root:先定义一个二叉树结点的结构体: typedef struct bst { char data; struct bst *left; struct bst *right; struct bst *father; }BSTree,*BST; root是指向二叉树结点的指针;
系统的功能结构:设置二叉排序树根结点、添加二排序叉树结点、 删除二排序叉树结点、查找给定的二叉树结点、输出二排序叉树、退 出。 功能说明: 设置二叉排序树根结点:为新创建的二叉排序树创建根节点。 添加二排序叉树结点:需要输入创建节点的数目,然后创建一 定数目的二叉排序树结点。 删除二排序叉树结点:给定一个数据(字母),然后查找,找到后
删除,否则,告知未找到, 查找给定的二叉树结点:给定一个数据(字母),然后查找,并给 出提示。 输出二排序叉树:按照先序遍历并输出二叉排序树的结点数 据。 退出:退出程序。
2.2 数据类型设计(或数据结构设计)
ADT BT{ 数据对象root:先定义一个二叉树结点的结构体: typedef struct bst { char data; struct bst *left; struct bst *right; struct bst *father; }BSTree,*BST; root是指向二叉树结点的指针; 数据关系:R={<(V或者C)P(V或者C)>|V,C∈D, <(V或者C)P(V或者 C)>表示由运算符P结合起来的表达式E} 基本操作: BST InitRoot() 操作结果:为空二叉排序树创建一个根节点,输入一个字符型数 据,将这个字符型数据存入结点的数据域中同时给左右孩子指针和父指 针置空,并返回一个结点的基址给指针。 void Inserter(root, key) 初始条件:二叉排序树不为空,存在根节点; 操作结果:输入一个字符型数据,先寻找二叉排序树中是否有此数 据,有则返回主菜单,没有则就二叉排序树的构造方法返回要插入旳数 据应该插入位置的父节点地址,创建一个新结点,将这个字符型数据存 入结点的数据域中,并将左右孩子指针置空,父指针指向父节点地址,
二叉排序树的操作
时间 2016.1——2016.1
一、教学要求
1. 掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力 2. 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能 3. 提高综合运用所学的理论知识和方法独立分析和解决问题的能力 4. 训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的 工作方法和作风
查找给定二叉排序树结点: 在主界面,输入4,进入查找界面。 先进行判空操作,若二叉排序树为空,给出提示:
按照提示输入要查找的结点数据: (1) 若存在:
(2) 若不存在
退出程序: 在主界面,输入0,退出程序;
.2 出现的问题和解决的方
第5章 课程设计总结
数据结构是计算机程序设计的重要理论技术基础,它不仅是计算机科 学的核心课程,而且也已经成为其他理工专业的热门选修课。随着高级 语言的发展,数据结构在计算机的研究和应用中已展现出强大的生命 力,它兼顾了诸多高级语言的特点,是一种典型的结构化程序设计语 言,它处理能力强,使用灵活方便,应用面广,具有良好的可移植性。 每一处编码都是在反复的熟悉数据结构的结构特性,及其语法、函数 和程序设计思想的过程,对数据结构的学习和提高很有益处,并且使我 明白了程序设计过程,如解决一些实际问题,从解决实际问题的角度, 我可以这样来看:第一要了解这个问题的基本要求,即输入、输出、完 成从输入到输出的要求是什么;第二,从问题的要害入手,从前到后的 解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输 出,在这个过程中,可确定所需的数据结构的基本类型——线性表、 栈、队列、串、数组、广义表、树和二叉树以及图等,然后确定处理过 程——算法,通过在编译环境中的编译与调试,可到最终的程序。最 后,在这次课设的过程中,我深刻的认识到了自己在学习方面的不足之 处,我知道我还有太多的基本的思想没有真正的理解,当然我不会灰 心,会在以后的日子里努力弥补不足。
输出二叉排序树: 在主界面时,输入5。 先进行判空操作,若二叉排序树为空,给出提示:
否则中序遍历并输出二叉排序树:
删除二叉排序树结点: 在主界面,输入3,进入删除界面。 先进行判空操作,若二叉排序树为空,给出提示
否则按照提示输入要删除的结点数据: (1)若输入数据在二叉排序树中不存在:
(2)若输入数据在二叉排序树中存在,则删除:(如图所示结点l已删 除)
.3 输出模块设计
cout<<endl;
if(root==NULL) { cout<<"空树!!!禁止操作!!!"; cout<<endl; } else{ a.ChainTree_LDR(root); cout<<endl; } break;
.4 查找模块设计
BSTree *key; cout<<" 请输入你要查找的结点数据:"; fflush(stdin); cin>>key2; key=a.SearchKey(root,key2); if(key->data==key2) { cout<<"二叉树中有此数据!!!"; cout<<endl; } else { cout<<"二叉树中没有此数据!!!"; cout<<endl;排序模块设计
1.《数据结构 (C语言版)》严蔚敏、吴伟民 主编 清华大学出版社 2004.11 2.《数据结构课程设计案例精编(用C/C++描述)》,李建学 等 编著,清华大学出版社 2007.2 3.《数据结构:用面向对象方法与C++语言描述》,殷人昆 主编, 清华大学出版社 2007.6
目
录
内蒙古科技大学课程设计任务书 I 第一章 需求分析 3 1.1 引言 3 1.2 任务概述 3 1.3 数据描述 3 1.4 功能需求 3 1.5 任务计划 4 第二章 概要设计 5 2.1 总体设计 5 2.2 数据类型设计(或数据结构设计) 2.3 接口设计 //函数声明 5 2.4 运行界面设计 5 第三章 详细设计 7 3.1 输入模块设计 7 3.2 输出模块设计 7 3.3 查找模块设计 7 第四章 测试分析 8 4.1 测试程序执行情况 8 4.2 出现的问题和解决的方法 8 第五章 用户手册(可选) 9 5.1 使用说明 9 5.2 运行说明 9 第六章 课程设计总结 10 附录:程序代码 11 参考文献 12 致谢 13
二、设计资料及参数
每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可更换。 以二叉链表表示二叉排序树,在此基础上实现二叉排序树的操作。 要求设计类(或类模板)来描述二叉排序树,包含必要的构造函数和析构函数, 以及其他能够完成如下功能的成员函数: 创建二叉排序树 输出二叉排序树 在二叉排序树中查找给定值 在二叉排序树中插入新结点 在二叉排序树中删除给定值 并设计主函数测试该类(或类模板)。
否
是
函数调用关系
main 主程序 显示菜单 创建根节点 插入结点 查找结点 删除结点 中序遍历二叉排序树
第2章 概要设计
.1 总体设计
2
二叉排序树
3 4
系统功能结构
5 6
7
退出 删除二排序叉树结点 设置二叉排序树根结点 添加二排序叉树结点 查找给定的二叉树结点 输出二排序叉树
8 9 10 11 12 13 14 15 16 17
五、评分标准
1. 根据平时上机考勤、表现和进度,教师将每天点名和检查 2. 根据课程设计完成情况,必须有可运行的软件。 3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。 4. 根据答辩的情况,应能够以清晰的思路和准确、简练的语言叙述自己的设计和回答教师的 提问
六、建议参考资料
内蒙古科技大学 本科生课程设计说明书
题 目:数据结构课程设 计
——二叉排序树 的操作
学生姓名: 许闻杰 学 号:1467159228 专 业:软件工程 班 级:14级软件2班 指导教师:周李勇 日 期:2016年 1月 8 日
内蒙古科技大学课程设计任务书
课程名称 设计题目 指导教师 周李勇 数据结构课程设计
BT抽象数据类型的设计
class BT { private: BST root; public: BT() :root(NULL) {} BST InitRoot(); void Inserter(BSTree *t,char key); BSTree *SearchKey(BSTree *t,char key); void DeleteKey(BSTree *t,char key);