资源描述:
《栈的应用之表达式求值电子教案.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、栈的应用之表达式求值精品文档栈的应用之表达式求值程序代码如下:#include"stdio.h"#include"stdlib.h"#defineMAXSIZE100#defineERROR0#defineOK1#defineOVERFLOW-1typedefstruct//栈的定义{char*base;char*top;intstacksize;}SqStack;intInitStack(SqStack&S)//栈的初始化{S.base=newchar[MAXSIZE];if(!S.base)exit(OVERFLOW);S.top=S.base;S.stacksize=MAXSIZ
2、E;returnOK;}charPush(SqStack&S,chare)//入栈{if(S.top-S.base==S.stacksize)returnERROR;*S.top++=e;returnOK;}charPop(SqStack&S,char&e)//出栈{if(S.top==S.base)returnERROR;e=*--S.top;returnOK;}intGetTop(SqStackS)//取栈顶元素{if(S.top!=S.base)return*(S.top-1);}charIn(charc)//判断读入字符是否为运算符{if('0'<=c&&c<='9')收集于网
3、络,如有侵权请联系管理员删除精品文档return0;elsereturn1;}charPrecede(charc1,charc2)//运算符的优先级{inti,j;charpre[7][7]={{'>','>','<','<','<','>','>'},{'>','>','<','<','<','>','>'},{'>','>','>','>','<','>','>'},{'>','>','>','>','<','>','>'},{'<','<','<','<','<','=','0'},{'>','>','>','>','0','>','>'},{'<','<','<','<','<
4、','0','='}};switch(c1){case'+':i=0;break;case'-':i=1;break;case'*':i=2;break;case'/':i=3;break;case'(':i=4;break;case')':i=5;break;case'#':i=6;break;}switch(c2){case'+':j=0;break;case'-':j=1;break;case'*':j=2;break;case'/':j=3;break;case'(':j=4;break;case')':j=5;break;case'#':j=6;break;}returnpr
5、e[i][j];}charOperate(chara,chartheta,charb)//运算函数{intresult;switch(theta){case'+':result=(a-48)+(b-48);break;case'-':result=(a-48)-(b-48);break;case'*':result=(a-48)*(b-48);break;case'/':result=(a-48)/(b-48);break;}returnresult+’0’;}charEvaluateExpression()收集于网络,如有侵权请联系管理员删除精品文档{SqStackOPTR;SqSt
6、ackOPND;InitStack(OPTR);InitStack(OPND);Push(OPTR,'#');charx,w,theta,a,b;w=getchar();while(w!='#'
7、
8、GetTop(OPTR)!='#'){if(!In(w)){Push(OPND,w);w=getchar();}elseswitch(Precede(GetTop(OPTR),w)){case'<':Push(OPTR,w);w=getchar();break;case'=':Pop(OPTR,x);w=getchar();break;case'>':Pop(OPTR,theta);Pop(
9、OPND,b);Pop(OPND,a);//a是第一运算数,b是第二运算数Push(OPND,Operate(a,theta,b));break;}}return(GetTop(OPND));}voidmain(){intc;printf("Pleaseinputoneexpression:");c=EvaluateExpression();printf("Result=%d",c-48);}(1)求2*(1+2+3)的运算截图:收集于