ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:124.50KB ,
资源ID:4019697      下载积分:2 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4019697.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(二叉树抽象数据类型数据结构实验报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

二叉树抽象数据类型数据结构实验报告.docx

1、二叉树抽象数据类型数据结构实验报告二叉树抽象数据类型数据结构实验报告 作者: 日期:数据结构实验报告题目:二叉树抽象数据类型的实现 学 院 *学院 专 业 * 年级班别 * 学 号 * 学生姓名 * 指导教师 成 绩 _21年6月 报告:内容: 详细 完整 不完整设计方案: 非常合理合理 较差实现: 全部实现 部分实现 未实现文档格式:规范 基本规范不规范 答辩:理解题目透彻,问题回答流利理解题目较透彻,回答问题基本正确部分理解题目,部分问题回答正确未能完全理解题目,答辩情况较差总评成绩:优 良 中及格 不及格一.实验概要二叉树抽象数据类型的实现二.实验目的1. 了解二叉树的定义以及各项基本操

2、作。2. 实现二叉树存储、遍历及其他基本功能三. 实验仪器设备和材料 Viualstuio 2010四实验的内容.二叉树类型定义以及各基本操作的简要描述;AD BinaryTree数据对象D:是具有相同特性的数据元素的集合.数据关系R:若D=,则R=,称inarTree为空二叉树;若D,则RH,是如下二元关系:(1) 在D中存在惟一的称为根的数据元素ot,它在关系下无前驱;(2) 若Droot,则存在D-ro=1,Dr,且D1D=;(3) 若D,则1中存在惟一的元素1,H,且存在r上的关系r;,H1,Hr;(4) (D1,1)是一棵符合本定义的二叉树,称为根的左子树,是一棵符合本定义的二叉树,

3、称为根的右子树。基本操作:niie(&T);操作结果:构造空二叉树T。DestrBiTre(&T);初始条件:二叉树T存在。操作结果:销毁二叉树T。CreBiTre(&,dfintin);初始条件:defiin给出二叉树T的定义。操作结果:按dfinitio构造二叉树T。CearBee(&T);初始条件:二叉树T存在。操作结果:将二叉树T清为空树。BiTrEpy(T);初始条件:二叉树T存在。操作结果:若为空二叉树,则返回TURE,否则AS。BiTreDepth();初始条件:二叉树T存在。操作结果:返回T的深度。Root(T);初始条件:二叉树T存在。操作结果:返回T的根。Value(,e)

4、;初始条件:二叉树T存在,是T中的某个结点。操作结果:返回e的值。Assi(T,&e,vlue); 初始条件:二叉树存在,是T中的某个结点。 操作结果:结点e赋值为ale。Paren(T,e); 初始条件:二叉树T存在,是T中的某个结点。操作结果:若e是的非跟结点,则返回它的双亲,否则返回“空”。LeftChid(,e);初始条件:二叉树T存在,e是T中的某个结点。操作结果:返回e的左孩子。若e无左孩子,则返回“空”。RigChid(,e);初始条件:二叉树T存在,e是T中的某个结点。操作结果:返回e的右孩子。若无右孩子,则返回“空”。LfSii(T,);初始条件:二叉树T存在,e是T中的某个

5、结点。操作结果:返回e的左兄弟。若e无左孩子或无左兄弟,则返回“空”。RigtSiblng(T,e);初始条件:二叉树T存在,e是T中的某个结点。操作结果:返回e的右兄弟。若e无右孩子或无右兄弟,则返回“空”。ADT iarre2所选择的存储结构描述及在此存储结构上各基本操作的实现;3.源代码主文件:main.cp:#incluebase. / 公用头文件、公共常量及公共函数等iclueree.h 二叉树二叉链表基本操作vod Menu(); /菜单函数o Prodce(car *sr); / 随机产生二叉树先序序列函数itma() /主函数 iTreeT,b,inser_b;char cmd

6、,strMAXSZ,elem; it c,te;IitiTre(); / 初始化二叉链表二叉树eu(); / 显示菜单ile(1) ClerLine(); / 清空结果显示区 rif(请选择操作:(按退出); cmd= gech(); ClearLine(); ffluh(stn); witch(cd) cse 0:/ 随机创建一棵二叉树hile(md !=y& cm != Y) Prduce(sr); / 随机产生二叉树先序序列 Crateiree(T,sr);/用此序列建树 howBiTre(T);/ 广义表形式显示 pntf( 使用创建的这个二叉树Y/N?);cm =gth(); Cle

7、arine(); break;case :/手动创建一棵二叉树 rintf( 请按二叉树先序序列输入二叉树:(空结点用空格 表示)n ); CeteBiTe(T);CleaLne(); ptf( 二叉树创建成功!n); ShowiTre(T); gtch(); beak; cae 4:/ 销毁二叉树 DsyBiTee(T);pinf(二叉树已被销毁!); getch(); beak; cse 6:/ 判空if(BiTrempty()) printf(二叉树是空二叉树。); elseprint(二叉树非空); gech(); brea;cae 8:/ 求深度 pintf(深度是 %d,BTree

8、Dp(T)); getch(); brea; case a:/ 求左孩子 ShowBiTree(T); printf(你想求哪个字符的左孩子?); elem = etr(); ClerLn(); bt=SearchBiTree(,lem); / 查找指定的结点值em if(!b)prnf( 你输入的结点不存在!请重新输入:); while(!bt); Carine(); bt= LetChild(T,bt); /求左孩子if(bt) intf(%的左孩子是%c,elem,bt-daa);es rit( %没有左孩子,e); ri(n参照二叉树:); howBiTree(); gtc(); re

9、; sec:/ 求右孩子 howBiTe(T); pintf(你想求哪个字符的右孩子?); o ele=getcar(); lear(); bt =SearchBiTre(T,eem); if(!b)prinf(你输入的结点不存在!请重新输入:); whie(!t); Clerie(); t = RightChid(T,bt); if(bt) ritf( %的右孩子是%c,ee,btda); elertf( %c没有右孩子,el); prin(参照二叉树:); SowBiTre();etc(); break; ce1:/ 先序遍历 if(!irEmy(T)) rintf(先序遍历序列为:);

10、Pedraerse(,Vist); else pinf(二叉树空,请先建树!); geth(); rek; cse :/ 中序遍历 if(!BTrEp(T) pint(中序遍历序列为:); InOrderaverse(T,isit); lse printf(二叉树空,请先建树!); etch(); be; ce 5:/后序遍历 if(!BTrEmpy(T)) rintf(后序遍历序列为:); ostOrerTrese(T,Viit); lse prtf( 二叉树空,请先建树!); getch(); brea; cas 7: 层次遍历 f(!BiTreEmpty(T)) printf(层次遍历序

11、列为:); LevelerTrvers(T,Vi); elseprintf(二叉树空,请先建树!); getc(); brea; case 9:/ 插入一棵二叉树为另一棵二叉树的子树do / 随机创建一棵右孩子为空 Prouc(r); / 且层数小于4的树reateree(insert_bt,s); wile(insertt-rchild|iTeDet(nset_t) 3); pnt(先随机创建一棵右子树空的二叉树如图n); ShoiTree(insert_t); 新创建的树 gec(); pif( 你想插入这棵树为原树哪个结点的子树 :); ShowBiTee(T); bt = SahBiT

12、ree(,getcha()); lerLn(); prif( 你想插入为 0. 左孩子 1. 右孩子:); fflush(tin); scanf(%d,&c); if(!InerCild(T, t,loc,inset_bt)) ntf( 插入出错!); ls ClearLine(); rint(插入成功!插入后T广义表形式为:n); ShoiTee(T); etc(); br;case b:/ 删除指定结点的子树 ShwBiTree(T);prntf( 你想删除哪个结点的子树?); lh(tdn); t= earhBiTre(T,tchar(); rit(n你想删除 0.左子树 1.右子树:)

13、; fflus(tdin); scf(%,&loc); Cearine(); f(!DeteChil(T,t,loc)) prin( 删除出错!); ee pitf( 删除成功,检查结果n); hwiTree(T); gtch();rek;cas e:/ 返回先序序列第i个结点的值 printf(请输入一个结点的先序序列序号: ); scanf(%d,&loc); e = loc; Clerine();eem Vaue(T,temp); print(参照二叉树:);ShowBiTree(T); rin(n);if(lm = ) prf(该结点不存在。); eseprintf(先序序列第%d个结

14、点值为%,lc,elem); getch();ra;case d:/ 结点赋值 oBiT(); prinf( 请输入要赋值的结点: ); o eem = getcha(); ClearLne(); t = SerhBree(T,e); f(!bt) printf( 你输入的结点不存在!请重新输入:); whle(!bt); CleaLine();printf(请输入新值:); flus(stin); le getchar(); Asign(T,bt,ee); rnf(赋值成功,请查看二叉树状态.n); SowiTre();getch(); beak; cas :/ 退出 case q: xt(

15、0); rturn 0;odMeu()/显示菜单函数printf( 0. 随机创建 CrtBTre() 1.先序遍历 PrerdrTravee()); printf(n 2 手动创建 CreaeBiTree() 3.中序遍历 IOderTavese());prntf(nn 4.销毁 esorBTe() 后序遍历 stOrderTravrse());printf(nn 6. 判空 BTemty() 层次遍历 LvlOrderTavere(); pt(n 8.求深度 iTreep() 9. 插入子树 InserChild(); rntf(nn. 求左孩子 LeftChi() b. 删除子树 eet

16、eChi(); prntf(nn c. 求右孩子RghChld() d. 结点赋值 Assin();pnf(nn .求结点值Value();prinf(n);viPrdce(ca *str)/ 用随机数产生二叉树层次字符序列/ 使所有节点的字符不相同,空节点用&表示 intexist27 , i, elem,aode = rand()1;wile( axes 15 | maxndes )mxnodes =rand()%41; /随机产生一个 大于15小于31的随机数作为结点个数*/ for(i= ; i 27 ;i+) xsti = ;/ 初始化存在数组,用于使所有结点值不同 i = 1;wh

17、il(i anodes) elem = rd()%26; if(!exiselem & sti2 != &) /结点未生成且存在父节点 st = lem +A; exstelm ; ese sr+ = &; ti = 0;头文件:be.h:#nludesdio.h#ncluconiohncdesdlibh#incldeinwsh#includemaloc.h#cludeath.h#defn OK 1#dfne TRUE 1#efe ERROR0#dfie FALS#efine AXIZ1 tyedef int tatu;tpdef hrTElmTp; owhere()/返回光标的坐标COSOL

18、_SRENBFFER_INOcsbinfo;etolereenBuffInfo(GeStdandle(TDOUTPUT_HANE),&cinfo); eur cbinfo.dCsrositoX;ortwerey()/返回光标的y坐标CNS_SCREN_UFF_INFO csbinf;etConsolcreBuferInfo(ettdanle(STD_OUPT_HADL),&csbino); eturnsbinfo.dwCurorPsiti.;voidgotoxy(shot,short y) /移动光标到(x,y)坐标ORont =x, y; SetCnsoleCurorPosition(Get

19、Stanle(STDOUTTHADE),point);vodClearLine(unsigd y =17)/清除第y行与+1行的字符,并使光标在行首,默认清除第17至1行for(nt i 0;i56;i+) gotoxy(i,y); utchr(); toxy(,hey()-3);void Cerera(sind x 96, unigd 1)/清除(0,y)-(,)区域的字符,并使光标移动到y for(unigned i = 0;ilchid); / 删除左子树 Dstryiree(Trchid); / 删除右子树fre(); = NULL;retur K;Sus CeateBiTree(BT

20、ree &)/先序建立二叉树T,空格表示空结点 ElemTypch; flush(stdin);ch=getche(); i(c = ) T = ULL; else (BiTe)mallc(sio(BiTNode); if(!T) exit(OVERLOW);T-da = c; 生成头结点 reatBiTree(T-lchild); / 构造左子树 CrteBiTree(T-rchl); /构造右子树 reun OK;ttusCeateBTree(iTree &T,char*str,unsiged i = 1)/ st储存着二叉树的层次序列,stri=表示结点不存在/ i为当前要创建结点对应的数组序号节点/ 由字符数组st先序建立一棵二叉树f(tri = & | i = stre(tr)) T = NL;/ 第i个结点不存在 ele = (ree)mlloc(izof(BiTode)); if(!T) i(OVERFLOW); T-datasti; / 生成根节点 CreateBiTre(T-lhd, str,i*2);/构造左子树CreateBiTee(T-rcid,sr, i*+);/ 构造右子树 return K;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1