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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

树和二叉树的实验报告.docx

1、树和二叉树的实验报告数据结构实验报告题目: 树和二叉树 一、 用二叉树来表示代数表达式(一)需求分析 输入一个正确的代数表达式,包括数字和用字母表示的数,运算符号+ - * / =及括号。系统根据输入的表达式建立二叉树,按照先括号里面的后括号外面的,先乘后除的原则,每个节点里放一个数字或一个字母或一个操作符,括号不放在节点里。分别先序遍历,中序遍历,后序遍历此二叉树,并输出表达式的前缀式,中缀式和后缀式。(二)系统设计1. 本程序中用到的所有抽象数据类型的定义;typedef struct BiNode /二叉树的存储类型 char s20; struct BiNode *lchild,*rc

2、hild;BiTNode,*BiTree;2. 主程序的流程以及各程序模块之间的层次调用关系,函数的调用关系图:3列出各个功能模块的主要功能及输入输出参数void push(char cc)初始条件:输入表达式中的某个符号操作结果:将输入的字符存入buf数组中去BiTree Create_RTree()初始条件:给出二叉树的定义表达式操作结果:构造二叉树的右子树,即存储表达式等号右侧的字符组BiTree Create_RootTree()初始条件:给出二叉树的定义表达式操作结果:构造存储输入表达式的二叉树,其中左子树存储X,根节点存储:=void PreOrderTraverse(BiTree

3、 T)初始条件:二叉树T存在操作结果:先序遍历T,对每个节点调用函数Visit一次且仅一次void InOrderTraverse(BiTree T)初始条件:二叉树T存在操作结果:中序遍历T,对每个节点调用函数Visit一次且仅一次void PostOrderTraverse(BiTree T)初始条件:二叉树T存在操作结果:后序遍历T,对每个节点调用函数Visit一次且仅一次int main() 主函数,调用各方法,操作成功后返回0(三)调试分析 调试过程中还是出现了一些拼写错误,经检查后都能及时修正。有些是语法设计上的小错误,比如一些参变量的初始值设置错误,使得程序调试出错。还有操作符优

4、先级设计不够合理,在输出遍历表达式结果时有错误。在小组讨论分析后纠正了这些结果,并尽量改进了算法的性能,减小时间复杂度。 有输入表达式建立二叉树的时间复杂度为O(n),先序遍历和中序遍历及后序遍历的时间复杂度都为O(n).(四)测试结果X:=(-b+(b2-4*a*c)0.5)/(2*a)(5)用户手册 打开界面后,根据提示,输入代数表达式,包括包括数字和用字母表示的数,运算符号+ - * / =及括号。输入完毕回车后系统将显示表达式的前缀式,中缀式,后缀式。(六)附录源程序:#include#include#include typedef struct BiNode char s20; st

5、ruct BiNode *lchild,*rchild;BiTNode,*BiTree;char ch,bt1024;int len=0;void push(char c) if (len0) /输入结束,堆栈中为右节点的值 if(Q=(BiTNode*)malloc(sizeof(BiTNode)=NULL) return NULL; memset(Q-s,0x00,sizeof(Q-s); Q-lchild=NULL; Q-rchild=NULL; memcpy(Q-s,bt,len); len =0; return Q; return NULL; else if (ch = () if(

6、Q=(BiTNode*)malloc(sizeof(BiTNode)=NULL) return NULL; memset(Q-s,0x00,sizeof(Q-s); Q-rchild = NULL; Q-lchild =Create_RTree(); ch=getchar(); if(ch=n) return Q; Q-s0=ch; Q-rchild=Create_RTree(); return Q; else if(ch =) if(len0) if(Q=(BiTNode*)malloc(sizeof(BiTNode)=NULL) return NULL; memset(Q-s,0x00,s

7、izeof(Q-s); Q-lchild=NULL; Q-rchild=NULL; memcpy(Q-s,bt,len); len=0; return Q; return NULL; else if(ch =+|ch=-|ch =*|ch =/|ch =) if(T=(BiTNode*)malloc(sizeof(BiTNode)=NULL) return NULL; if(Q=(BiTNode*)malloc(sizeof(BiTNode)=NULL) return NULL; memset(Q-s,0x00,sizeof(Q-s); memset(T-s,0x00,sizeof(T-s);

8、 T-lchild=NULL; T-rchild=NULL; if(len=0) if(ch =+|ch =-) / 只有+-号前面可以不是数字,此时左节点为空 T-s0=ch; if(S=(BiTNode*)malloc(sizeof(BiTNode)=NULL) return NULL; memset(S-s,0x00,sizeof(S-s); S-lchild=NULL; S-rchild=NULL; p=S-s; while(1) ch=getchar(); if(ch=+|ch =-|ch =*|ch =/|ch=) break; *p+=ch; T-rchild=S; else r

9、eturn NULL; else /堆栈中为左节点值 memcpy(T-s,bt,len); len =0; Q-lchild=T; Q-s0=ch; if(Q-rchild = Create_RTree() = NULL) return NULL; else return Q; else push(ch); return NULL;BiTNode *Create_RootTree() BiTree Q,T; while(ch=getchar()!= EOF) if (ch=n) return NULL; else if(ch=:) /构造根节点:= ch=getchar(); if(ch!=

10、) return NULL; if(Q=(BiTNode*)malloc(sizeof(BiTNode)=NULL) return NULL; memset(Q-s,0x00,sizeof(Q-s); memcpy(Q-s,bt,len); len =0; Q-lchild = NULL; Q-rchild = NULL; if(T=(BiTNode*)malloc(sizeof(BiTNode)=NULL) return NULL; T-lchild = Q; memset(T-s,0x00,sizeof(T-s); memcpy(T-s,:=,2); /继续处理:=后面的数据,作为根节点的

11、右节点 if(T-rchild=Create_RTree()=NULL) return NULL; return T; else push(ch); return NULL;void PreOrderTraverse(BiTree T) if(T) printf(%s ,T-s); PreOrderTraverse(T-lchild); PreOrderTraverse(T-rchild); else return;void InOrderTraverse(BiTree T) if(T) InOrderTraverse(T-lchild); printf(%s ,T-s); InOrderTr

12、averse(T-rchild); else return; void PostOrderTraverse(BiTree T) if(T) PostOrderTraverse(T-lchild); PostOrderTraverse(T-rchild); printf(%s ,T-s); else return;int main() printf(请输入一个中缀表达式:n); BiTree T=NULL; if(T=Create_RootTree()=NULL) return 0; printf(先序遍历:); PreOrderTraverse(T); printf(n); printf(中序遍历:); InOrderTraverse(T); printf(n); printf(后序遍历:); PostOrderTraverse(T); printf(n); return 0;测试数据结果:

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

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