版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构实验报告实验题目: 利用二叉排序树对一组数据排序并查找元素实验目的:(1)熟悉二叉排序树的生成算法;了解将排序二叉树转化为有序排列的方法;学会在一组数据中查找元素。实验内容:建立一组数据的二叉排序树,然后中序遍历,并查找待查找元素。 一、需求分析1输入的形式和输入值的范围:本程序要求输入待排序数的个数,并逐个输入待排序数,最 后输入待查找元素的值。2输出的形式:按从小到大的顺序输出排过序的数,并输出查找结果,如果存在,还需输出 待查找数在已排序序列中的位置。3程序所能达到的功能:对确定个数的一组数实现递增排序,并查找待查找元素。 4测试数据:待排序数个数:5;待排序数:12 43 23
2、 54 8;已存在元素查找:23;不存在的元素查找:10概要设计二叉排序树的生成模块:根据二叉排序树的定义,任一节点如果有左子树,其左子 树各节点的数据必须小于该节点的数据;任一节点如果有右子树,其右子树各节点 的数据必须等于或大于该节点的数据。则可将第一个数据作为整个二叉排序树的根 节点,以后的数据都从根节点起,由上而下逐层与原有节点的数据相比较,若较原 节点数值小,则进而与其左孩子节点的数值比,否则与其右孩子节点数据比,直至 找到一个节点相应的指针是空指针了,即将新结点插入此处作为终端节点。已排序序列的输出与查找元素模块:根据排序二叉树的结构特点,只要对该二叉树 进行中序遍历,即可按从小到
3、大的顺序访问这些数据节点,再在访问这些节点的时 候与待查找元素比较,如果找到,记下该数据位置,如果访问完了还没找到,则待 查找元素不存在。详细设计定义结构体变量typedef struct nodeint data;struct node *lchild;struct node *rchild;Lnode,*Linklist;定义指针栈typedef structLinklist dataMAXSIZE;int top;Seqstack;初始化栈函数void Initstack(Seqstack &s)s.top=-1;判断栈空函数,如果栈空返回1,否则返回 0 int StackEmpty(
4、Seqstack &s)if(s.top=-1)return 1;elsereturn 0;入栈函数void push(Seqstack &s,Linklist x)s.top+;s.datas.top=x;出栈函数Linklist pop(Seqstack &s)return s.datas.top-;二叉排序树的生成函数,具体算法为:读取一个待排序数;生成一个新节点,将读入数据赋给新节点;若根节点为空,则另根节点等于该新节点,否则Q如果小于根节点,沿左链域比较;Q否则沿右链域比较;直至到终端,插入该结点。Linklist build(Linklist BT)int n,i,a100=0;L
5、inklist p,q;prin tf(请输入数的个数:);scanf(%d,&n);prin tf(请输入待排序的数:n); for(i=0;idata=ai;p-lchild=NULL;p-rchild=NULL;if(BT=NULL)BT=p; q=p;elseq=BT;while(p-data!=q-data)if(p-datadata)if(q-lchild=NULL)q-lchild=p;else q=q-lchild;elseif(q-rchild=NULL)q-rchild=p;else q=q-rchild;return BT;已排序序列的输出与查找元素函数:对二叉树进行中序
6、遍历,并在访问节点的同时 以 m 计数器记下已访问节点的个数,同时将该节点数据与待查找数据比较,如果相等,则用n记下此时的m值,如果二叉树遍历完了n仍然为0则代表没找到,最 后返回 n 的值。int visit(Linklist BT,int &a,int &n)int m=0;Linklist p;Seqstack s;Initstack(s);p=BT;push(s,p);while(!StackEmpty(s)while(p-lchild!=NULL) p=p-lchild; push(s,p);dop=pop(s);m+;if(p-data=a)n=m;printf(%d ,p-dat
7、a);while(p-rchild=NULL&!StackEmpty(s); if(p-rchild!=NULL) p=p-rchild; push(s,p);return n;主函数模块,其中a为待排序数的个数,BT为二叉排序树的根节点 int main()int a,t,n=0;Linklist BT=NULL;BT=build(BT);prin tf(请输入待查找元素:);scanf(%d,&a);prin tf(排序结果为:n); t=visit(BT,a,n);printf(n);if(n!=0)printf(待查找元素存在,且在已排序序列的第%d位!n,n); else prin
8、tf(待查找元素不存在!n);return 0;使用说明、测试分析及结果程序使用说明:(1)该程序在VC环境下运行;(2) 其余操作按提示进行即可。测试结果与分析:(1) 已存在数据查找测试G:E 学习 DS07Deb ugDS07.exe(2)不存在数据查找汚数素 在to 8兀 4w y 需4找G:E 学习 DS07Deb ugDS07.exe(2)不存在数据查找汚数素 在to 8兀 4w y 需4找:5不he 舉5查为43素y 馨23待果3兀an 天入3人结2找S 務 4 幫12杳一es 當12羸8待pr:10cont inue回顾与分析:在二叉排序树中,其节点是按照左子树、根、右子树的次序由小到大排序的 因此在生成模块中对每一个数据都需从根节点开始比较来确定其属于哪个节点的哪个孩子 而且在序列输出模块中采用了二叉树的中序遍历以让所得节点序列为一个有序序列。运行界面。五、实验总结本次程序在排序树生成模块中关于判断新结点是否已链到排序树终端的条件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年上海市《保密知识竞赛必刷100题》考试题库含答案详解(综合题)
- 2026上半年四川内江职业技术学院考核招聘教师及专职辅导员10人备考题库附答案详解(典型题)
- 2026湖南怀化市会同县县直企事业单位引进高层次及急需紧缺人才35人备考题库附答案详解(黄金题型)
- 2026湖南常德市第一中医医院招聘15人备考题库(第一批)及参考答案详解一套
- 山东潍坊市教育局招聘2026届山东省公费师范毕业生82人备考题库及一套参考答案详解
- 2026内蒙古鄂尔多斯市东胜区东青小学招聘语文、英语教师2人备考题库附答案详解(能力提升)
- 2025年县乡教师选调考试《教育学》题库高频难、易错点100题模拟试题及答案详解【网校专用】
- 2026山东青岛华通金创控股集团有限公司招聘2人备考题库附答案详解ab卷
- 2026甘肃驰擎新材科技有限公司招聘备考题库含答案详解(预热题)
- 2026云南昆明文理学院招聘备考题库附答案详解ab卷
- 脉冲场消融在心房颤动治疗中的应用进展2026
- (2025年)医师定期考核题库附答案
- GB/T 3159-2026液压式万能试验机
- 2026年建安杯信息通信建设行业安全竞赛重点题库(新版)
- 施工现场劳务人员组织与管理方案
- 2026年3月15日九江市五类人员面试真题及答案解析
- 2026“蓉漂人才荟”成都东部新区事业单位公开招聘事业人员(30人)笔试参考题库及答案解析
- 机械类专职安全生产管理人员(C1)题库
- 2026年扎兰屯职业学院单招职业技能考试题库及答案解析
- 慈善总会考核制度
- 老年骨质疏松骨折的长期随访管理
评论
0/150
提交评论