




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
6.4.1二叉排序树基本操作的实现 专业:*姓名:*学号:*日期:2011-9-17一, 问题描述二, 需求分析三, 概要设计四, 详细设计五, 测试分析六, 源程序清单七, 用户使用手册八, 心得体会一、 问题描述从键盘读入一组数据,建立二叉排序树并对其进行查找、遍历、格式化输出操作。二、 需求分析1. 读入给定的数据,构造二叉排序树,实现初始化。2. 给定数据的格式为,第一行为元素个数,遇0退出程序。3. 提供菜单功能,选项包括查找、插入、删除和打印等。三、 概要设计1.数据结构:struct nodeint num;node *chl,*chr;分别定义了指向左右子树的指针。2.函数介绍void Insert(const int &temp,node *root);void Delete(const int &key,node *p);bool Find(const int &key,node *p,node *net,int &depth);void Print(const node *p);bool Menu(node *root);函数如其名,功能也亦如其名。另外为了防止边界情况,如空树或者没有指定元素的非法删除以及查找,所以会在函数内部直接进行判断,以及状态返回判断等。3. 函数形参部分形参使用引用的方式进行传递,还有些使用的是指针的指针,这样保传入的指针指向的内容可以被修改,并且函数返回之后可以继续指向原有内容。四、 详细设计void Insert(const int &temp,node *root)if( *root=NULL )*root = new node;(*root)-chl = (*root)-chr = NULL;(*root)-num = temp;else if( (*root)-numchr);elseInsert(temp,&(*root)-chl);/ 插入函数,使用递归的方式进行插入,并动态创建对象。void Delete(const int &key,node *p)if( *p=NULL )cout删除错误,不存在该元素!num=key )if( (*p)-chl=NULL )temp = *p;*p = (*p)-chr;delete temp;else if( (*p)-chr=NULL )temp = *p;*p = (*p)-chl;delete temp;elsetemp = (*p)-chl;node *front=NULL;while( temp-chr )front = temp;temp = temp-chr;front-num = temp-num;if( front!=temp )front-chr = temp-chl;elsefront-chl = temp-chl;delete temp;else if( (*p)-numkey )Delete(key,&(*p)-chl);elseDelete(key,&(*p)-chr);/ 删除函数。按照规则,分三种情况进行删除,最后还会销毁指针指向的对象。如果某个元素不在其中,那么最后指向的指针必然为空。另外之前没考虑到删除失败的状态返回情况,所以后面使用了一个全局变量来作为补救标记。bool Find(const int &key,node *p,node *net,int &depth)if( p=NULL )return false;depth+;net = p;if( p-num=key )return true;else if( p-numkey )return Find(key,p-chl,net,depth);elsereturn Find(key,p-chr,net,depth);/ 查找函数,参数 *net用以指向当前比较的指针,但却没有具体实现输出其指向的信息,觉得即便输出对本程序意义不大,所以没有具体关注。depth为查找需要的次数。void Print(const node *p)if( p=NULL )return;coutnumchl);Print(p-chr);/ 只提供了中序遍历输出的情况,其他情况没考虑。五、 测试分析1. 测试环境:Code:Blocks 10.05.2. 输入过程:课本提供数据:711 33 44 55 58 79 88两种查找情况 删除操作 插入操作 六、 源程序清单#include #include #include #include #include using namespace std;struct nodeint num;node *chl,*chr;bool flagdel;ifstream in(sort.txt);void Insert(const int &temp,node *root)if( *root=NULL )*root = new node;(*root)-chl = (*root)-chr = NULL;(*root)-num = temp;else if( (*root)-numchr);elseInsert(temp,&(*root)-chl);void Delete(const int &key,node *p)if( *p=NULL )cout删除错误,不存在该元素!num=key )if( (*p)-chl=NULL )temp = *p;*p = (*p)-chr;delete temp;else if( (*p)-chr=NULL )temp = *p;*p = (*p)-chl;delete temp;elsetemp = (*p)-chl;node *front=NULL;while( temp-chr )front = temp;temp = temp-chr;front-num = temp-num;if( front!=temp )front-chr = temp-chl;elsefront-chl = temp-chl;delete temp;else if( (*p)-numkey )Delete(key,&(*p)-chl);elseDelete(key,&(*p)-chr);bool Find(const int &key,node *p,node *net,int &depth)if( p=NULL )return false;depth+;net = p;if( p-num=key )return true;else if( p-numkey )return Find(key,p-chl,net,depth);elsereturn Find(key,p-chr,net,depth);void Print(const node *p)if( p=NULL )return;coutnumchl);Print(p-chr);bool Menu(node *root)int choice,num,depth;node *net;bool suc;coutendltt-二叉排序树演示-endl;coutendlendltttt菜单endlendl;coutt 1.插入 t2.查找endlendl;coutt 3.遍历 t4.删除endlendl;coutt 5.退出菜单endlendlendl;coutchoice;if( choice=5 )return false; coutendlendl;switch( choice )case 1:cout输入要插入的数字:num;Insert(num,&(*root);cout插入成功!endl;break;case 2:cout输入查找元素:num;if( *root=NULL )cout二叉树为空,查找失败!endl;elsedepth = 0;net = NULL;suc = Find(num,*root,net,depth);if( suc )cout查找成功。endl;elsecout查找失败,没有该元素。endl;cout查找深度 : depthendl;break;case 3:cout中序遍历二叉排序树endl;if( *root=NULL )cout二叉树为空!endl;elsePrint(*root);break;case 4:cout输入要删除的数字:num;flagdel = true;Delete(num,&(*root);if( flagdel ) cout删除成功!endlendl;break; case 5: return false;default:cout错误选择。endl;coutendlendl;return true;int main()int i;int num,depth;bool first=true;couttttt*初始化*endlnum,num )first = false;node *root= NULL;depth=0;vector ve(num+1);coutendl依
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 五年级品德与生活下册 古老的丝绸之路说课稿 首师大版
- 2025企业租赁合同范本:员工住房租赁协议
- 第一单元第6课 图像效果的处理-说课稿 2024-2025学年粤教版(2019)初中信息技术八年级上册 -
- 2025【合同范本】融资租赁合同协议
- 江苏省徐州市高中地理 第一单元 区域地理环境与人类活动 1.4 学会分析区域差异1说课稿 鲁教版必修3
- 山东省烟台市黄务中学九年级化学上册 5.2 化学反应的表示说课稿1 (新版)鲁教版
- 印刷厂员工退休补贴管理规定
- 第7节 动画综合设计说课稿-2025-2026学年初中信息技术北师大版八年级下册 -北师大版
- 2025授权合同 房地产评估咨询委托合同书
- 4.2一元一次方程及其解法(2)说课稿2024-2025 学年苏科版数学七年级上册
- 部编版五年级上册语文教案1-6单元(表格式)
- GB/T 4798.5-2007电工电子产品应用环境条件第5部分:地面车辆使用
- GB/T 4513-2000不定形耐火材料分类
- 12YJ6 外装修标准图集
- GB/T 27664.3-2012无损检测超声检测设备的性能与检验第3部分:组合设备
- 阅读与思考(选学)为什么要证明课件
- HPLC高效液相色谱解读课件
- 中医诊断学望诊
- DN1000顶管施工方案
- 《外科学》第七节 直肠癌
- DB32∕T 2975-2016 水运工程建设管理用表
评论
0/150
提交评论