C语言实现中缀、后缀、前缀表达式 相互转化并求值

C语言实现中缀、后缀、前缀表达式 相互转化并求值

ID:47012454

大小:1.84 MB

页数:20页

时间:2019-12-03

C语言实现中缀、后缀、前缀表达式 相互转化并求值_第1页
C语言实现中缀、后缀、前缀表达式 相互转化并求值_第2页
C语言实现中缀、后缀、前缀表达式 相互转化并求值_第3页
C语言实现中缀、后缀、前缀表达式 相互转化并求值_第4页
C语言实现中缀、后缀、前缀表达式 相互转化并求值_第5页
资源描述:

《C语言实现中缀、后缀、前缀表达式 相互转化并求值》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、1.问题描述(1)表达式求值问题表达式是数据运算的基本形式。人们的书写习惯是中缀式,如:11+22*(7-4)/3。中缀式的计算按运算符的优先级及括号优先的原则,相同级别从左到右进行计算。表达式还有后缀式(如:2274-*3/11+)和前缀式(如:+11/*22–743)。后缀表达式和前缀表达式中没有括号,给计算带来方便。如后缀式计算时按运算符出现的先后进行计算。本设计的主要任务是进行表达式形式的转换及不同形式的表达式计算。2.数据结构设计(1)表达式求值问题由于表达式中有字符与数字两种类型,故定义结点一个标志域data,标志结点存储的为字符data=2还是数字data=

2、1,再寻找结点中对应的存储位置,读取数字域data1,字符域data2。而在前缀表达式时,存在表达式逆序,因表达式类型不统一,用栈逆序极不方便,选择构建双向链表,存储表达式。typedefstructNode//定义存储中缀表达式的结点类型{intdata;intdata1;chardata2;structNode*next;}Lnode;typedefstructNode2//定义存储前缀表达式的结点类型{intdata;intdata1;chardata2;structNode2*next;structNode2*prior;}Lnode2;3.运行、测试与分析(1)

3、表达式求值问题(1)按提示输入中缀表达式,如图1.1所示。如输入中缀表达式不正确,提示输入有误,如图1.2,1.3所示。图1.1图1.2图1.3(2)选择表达式转换并求值方式。按“1”选择中缀表达式求值,如图1.4所示。图1.4(3)按“2”选择中缀表达式转变为后缀表达式并求值,如图1.5所示。图1.5(4)按“3”选择中缀表达式转变为前缀表达式并求值,如图1.6所示。图1.6附录:源代码(1)表达式求值问题#include#include#defineMAXNUM100typedefstructNode//定义存储中缀表达式的结点类

4、型{intdata;intdata1;chardata2;structNode*next;}Lnode;typedefstructNode2//定义存储前缀表达式的结点类型{intdata;intdata1;chardata2;structNode2*next;structNode2*prior;}Lnode2;typedefintselemtype1;//定义运算数栈的结点typedefstruct//定义运算数栈的类型{selemtype1*base;selemtype1*top;}sqstack1;voidInitStack1(sqstack1&s)//新建一个空运

5、算数栈{s.base=(selemtype1*)malloc(MAXNUM*sizeof(selemtype1));s.top=s.base;if(!s.base)printf("出错:申请空间失败!");}voidPush1(sqstack1&s,selemtype1&e)//运算数栈,入栈:插入元素e为新的栈顶元素{if(s.top-s.base>=MAXNUM)printf("出错:表达式过长!1");*s.top++=e;}voidGetTop1(sqstack1s,selemtype1&e)//运算数栈,用e返回栈顶元素{e=*(s.top-1);}vo

6、idPopopnd1(sqstack1&s,selemtype1&e)//运算数栈,退栈:删除栈顶元素,并用e返回其值{e=*--s.top;}intstackempy1(sqstack1s)//运算数栈,若为空栈返回1,否则返回0{if(s.top==s.base)return1;elsereturn0;}typedefcharselemtype2;//定义运算符栈的结点类型typedefstruct//定义运算符栈类型{selemtype2*base;selemtype2*top;}sqstack2;voidInitStack2(sqstack2&s)//新建一个空运

7、算符栈{s.base=(selemtype2*)malloc(MAXNUM*sizeof(selemtype2));s.top=s.base;if(!s.base)printf("出错:申请空间失败!");}voidPush2(sqstack2&s,selemtype2&e)//运算符栈,入栈:插入元素e为新的栈顶元素{if(s.top-s.base>=MAXNUM)printf("出错:表达式过长!2");*s.top++=e;}voidGetTop2(sqstack2s,selemtype2&e)//运算符栈,用e

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。