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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

基于二叉树结构的表达式求值算法Word文档下载推荐.docx

1、/计算表达式的值,bt为据表达式创建的二叉树,用rst返回表达式的值int PreOrderTraverse(BiTree bt);/先序遍历二叉树bt,输出先序遍历序列int InOrderTraverse(BiTree bt); /中序遍历二叉树bt,输出中序遍历序列int PostOrderTraverse(BiTree bt); /后序遍历二叉树bt,输出后序遍历序列int DestroyBiTree(BiTree &bt); /销毁二叉树/二叉树结构的表达式求解算法入口void expnbitree();2.源文件expntree.c2425262728293031323334353

2、637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615

3、715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625

4、7258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354#include

5、expnbitree.h/ExpnBiTree实现子程序入口void expnbitree() int n, len, i; /n标志量,值为0,退出程序;len存储表达式的长度;i一般变量 char expnEXP_LEN + 1; /存放表达式 double rst; /存放表达式计算结果 BiTree bt = NULL; /声明一个二叉树 gets_s(expn); do i = 0; printf(请输入合法的表达式:n); gets_s(expn); for (i = 0, len = 0; expni != 0; i+) /去掉表达式中的空格,并计算表达式的长度 if (expn

6、i ! ) expnlen+ = expni; expnlen = 正在构建二叉树n if (CreateBiTree(bt, expn, len) printf(二叉树构建成功! else /销毁未成功建立的二叉树,释放动态申请的内存二叉树构建失败!将销毁二叉树 if (DestroyBiTree(bt) printf(二叉树销毁成功! else 二叉树销毁失败! exit(0); continue; 输出表达式的先序遍历序列: PreOrderTraverse(bt);输出表达式的中序遍历序列: InOrderTraverse(bt);输出表达式的后序遍历序列: PostOrderTrav

7、erse(bt);计算表达式的值: if (Calculate(bt, rst)%gn, rst);计算表达式的值失败!即将销毁二叉树 if (DestroyBiTree(bt) else exit(0);如果要继续计算下一个表达式,请输入1,否则,返回上一级:n scanf_s(%d, &n); getchar(); while (n=1);/创建二叉树bt, char *p, int len) int i = 0, lnum = 0, rpst1 = -1, rpst2 = -1, pn = 0; /lnum记录(的未成对个数; /rpst1/rpst2记录表达式中优先级最低的(*、/)/

8、(+-)的位置; /pn记录操作数中.的个数,以判断输入操作数是否合法 if (len = 0) return 1; if (!(bt = (BiTree)malloc(sizeof(BiTNode) 内存申请失败n return 0; else /初始化 bt-lchild = bt-rchild = NULL; memset(bt-data, , sizeof(bt-data);/memset是计算机中C/C+语言函数memset(void *s,int ch,size_t n); /将s所指向的某一块内存中的后n个字节的内容全部设置为ch指定的ASCII值, /第一个值为指定的内存地址,

9、块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为s。dflag = 1; /默认bt为叶子节点(即,存放操作数) /合法性检查 if (*p = + | *p = */.) /表达式首不合法; 表达式输入错误! return 0; if (!(*(p + len - 1) = | *(p + len - 1) 0&*(p + len - 1) 9) /不为右括弧或数字,则表达式尾不合法;表达式输入错误! if (len = 1) /此时只有表达式为数字,表达式才合法 if (*p) return 0; bt-data0 = *p; return 1; else i

10、f (len = 2) /此时只有表达式为正数或负数,表达式才合法 if (*p = - | *p *p *(p + 1) data1 = *(p + 1); /表达式合法,开始创建二叉树 if (*p = ( lnum+; for (i = 1; i *(p + i - 1) lnum-; if (lnum -1)/+ -dflag = 0; /data存放操作数data0 = *(p + rpst2); if (CreateBiTree(bt-lchild, p, rpst2) if (CreateBiTree(bt-rchild, p + rpst2 + 1, len - rpst2 -

11、 1) return 1; if (rpst1 1) printf( return 0; bt-datai = *(p + i); else /此时表达式首一定是操作符,其余部分被一对括弧括起来 bt-data0 = if (CreateBiTree(bt-rchild, p + 2, len - 3) return 1; else return 0; else /此时表明表达式为几个因子想成或相除而组成的data0 = *(p + rpst1);lchild, p, rpst1)rchild, p + rpst1 + 1, len - rpst1 - 1)/计算表达式rst) double

12、l = 0, r = 0;/l、r分别存放左右子树所代表的字表达式的值bt) rst = 0; if (bt-dflag = 1) rst = atof(bt-data);/atof(),是C语言标准库中的一个字符串处理函数,/功能是把字符串转换成浮点数, /所使用的头文件为lchild, l)/后序 if (Calculate(bt-rchild, r) switch (bt-data0) case : rst = l + r; break; rst = l - r; rst = l*r; if (r = 0) printf(除数为0 ! return 0; else rst = l / r

13、; break; default: return 0; /printf(%g%c%g=%gn,l,bt-data0,r,rst);/输出运算过程/先序遍历二叉树int PreOrderTraverse(BiTree bt) if (bt)%s , bt- if (PreOrderTraverse(bt-lchild) if (PreOrderTraverse(bt-rchild) return 1;/中序遍历二叉树int InOrderTraverse(BiTree bt) if (InOrderTraverse(bt- if (InOrderTraverse(bt-/后序遍历二叉树int PostOrderTraverse(BiTree bt) if (PostOrderTraverse(bt- if (PostOrderTraverse(bt- else return 0;/销

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

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