




如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
.... /NUMPAGES20 1.问题描述 (1)表达式求值问题 表达式是数据运算的基本形式。人们的书写习惯是中缀式,如:11+22*(7-4)/3。中缀式的计算按运算符的优先级与括号优先的原则,相同级别从左到右进行计算。表达式还有后缀式(如:2274-*3/11+)和前缀式(如:+11/*22–743)。后缀表达式和前缀表达式中没有括号,给计算带来方便。如后缀式计算时按运算符出现的先后进行计算。本设计的主要任务是进行表达式形式的转换与不同形式的表达式计算。 数据结构设计 (1)表达式求值问题 由于表达式中有字符与数字两种类型,故定义结点一个标志域data,标志结点存储的为字符data=2还是数字data=1,再寻找结点中对应的存储位置,读取数字域data1,字符域data2。而在前缀表达式时,存在表达式逆序,因表达式类型不统一,用栈逆序极不方便,选择构建双向链表,存储表达式。 typedefstructNode//定义存储中缀表达式的结点类型 {intdata; intdata1; chardata2; structNode*next; }Lnode; typedefstructNode2//定义存储前缀表达式的结点类型 {intdata; intdata1; chardata2; structNode2*next; structNode2*prior; }Lnode2; 运行、测试与分析 (1)表达式求值问题 (1)按提示输入中缀表达式,如图1.1所示。如输入中缀表达式不正确,提示输入有误,如图1.2,1.3所示。 图1.1 图1.2 图1.3 选择表达式转换并求值方式。按“1”选择中缀表达式求值,如图1.4所示。 图1.4 (3)按“2”选择中缀表达式转变为后缀表达式并求值,如图1.5所示。 图1.5 按“3”选择中缀表达式转变为前缀表达式并求值,如图1.6所示。 图1.6 附录:源代码 (1)表达式求值问题 #include<stdio.h> #include<stdlib.h> #defineMAXNUM100 typedefstructNode//定义存储中缀表达式的结点类型 {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)//新建一个空运算数栈 {s.base=(selemtype1*)malloc(MAXNUM*sizeof(selemtype1)); s.top=s.base; if(!s.base)printf("出错:申请空间失败!\n"); } voidPush1(sqstack1&s,selemtype1&e)//运算数栈,入栈:插入元素e为新的栈顶元素 {if(s.top-s.base>=MAXNUM) printf("出错:表达式过长!1\n"); *s.top++=e; } voidGetTop1(sqstack1s,selemtype1&e)//运算数栈,用e返回栈顶元素 {e=*(s.top-1); } voidPopopnd1(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)//新建一个空运算符栈 {s.base=(selemtype2*)malloc(MAXNUM*sizeof(selemtype2)); s.top=s.base; if(!s.base)printf("出错:申请空间失败!\n"); } voidPush2(sqstack2&s,selemtype2&e)//运算符栈,入栈:

17****21
实名认证
内容提供者


最近下载