您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 栈的应用之表达式求值
栈的应用之表达式求值程序代码如下:#includestdio.h#includestdlib.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=MAXSIZE;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')return0;elsereturn1;}charPrecede(charc1,charc2)//运算符的优先级{inti,j;charpre[7][7]={{'','','','','','',''},{'','','','','','',''},{'','','','','','',''},{'','','','','','',''},{'','','','','','=','0'},{'','','','','0','',''},{'','','','','','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;}returnpre[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;SqStackOPND;InitStack(OPTR);InitStack(OPND);Push(OPTR,'#');charx,w,theta,a,b;w=getchar();while(w!='#'||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(OPND,b);Pop(OPND,a);//a是第一运算数,b是第二运算数Push(OPND,Operate(a,theta,b));break;}}return(GetTop(OPND));}voidmain(){intc;printf(Pleaseinputoneexpression:\n);c=EvaluateExpression();printf(Result=%d\n,c-48);}(1)求2*(1+2+3)的运算截图:(2)求1+2+3+4+5+6的运算截图:
本文标题:栈的应用之表达式求值
链接地址:https://www.777doc.com/doc-5128371 .html