全文预览

设计并实现将一个中缀表达式转换成逆波兰式,然后对此逆波兰表达式求值的算法。

上传者:业精于勤 |  格式:doc  |  页数:6 |  大小:19KB

文档介绍
;case'(':n=4;break;case')':n=5;break;case'#':n=6;break;}returna[m][n];}voidEvaluateExpression()//将中缀表达式转化为后缀表达式并求其值{SqStackOPTR,OPND;SElemTypex,c,a,theta,b;InitStack(OPTR);Push(OPTR,'#');InitStack(OPND);c=getchar();putchar(c);while(c!='#'||(GetTop(OPTR)!='#')){if(!In(c))//不是运算符则进栈{Push(OPND,c);c=getchar();putchar(c);}elseswitch(Precede(GetTop(OPTR),c))//比较栈顶运算符跟当前运算符的优先级{case-1:{Push(OPTR,c);c=getchar();putchar(c);break;}//当前运算符的优先级高,进栈case0:{Pop(OPTR,x);putchar(c);c=getchar();break;}//运算符优先级相同,退栈case1:{Pop(OPTR,theta);Pop(OPND,b);Pop(OPND,a);putchar(b);putchar(a);putchar(theta);x=Operate(a,theta,b);putchar(x);Push(OPND,x);//将运算结果入栈break;}//当前运算符的优先级低,出栈,参与运算}}printf("\n求值结果:");putchar(GetTop(OPND));printf("\n");}voidmain(){printf("请按顺序输入表达式(表达式以'#'结束,如2*(3+2)#):\n");EvaluateExpression();}

收藏

分享

举报
下载此文档