资源描述:
《栈实现表达式的简单求值》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、利用栈编写表达式求值程序:输入含有“+”、“-”、“*”、“/”四则运算的表达式,其中负数要用(0-正数)表示,并以=结束。要求输出表达式的值此题目可选做。注意:计算的结果数值不可以大于79.#include#include#defineOK1#defineERROR0#defineSTACK_INIT_SIZE100//存储空间初始分配量 typedefstruct{char*base;char*top;intstacksize;}Stack;intInitSta
2、ck(Stack&S){S.base=(char*)malloc(STACK_INIT_SIZE*sizeof(char));if(!S.base)returnERROR; S.top=S.base;S.stacksize=STACK_INIT_SIZE;returnOK;}intPop(Stack&S,char&e){if(S.top==S.base)returnERROR;e=*--S.top;returnOK;}intGetTop(StackS,char&e){ if(S.top==S.base)
3、returnERROR;e=*--S.top;returnOK;}intPush(Stack&S,charch){if(S.top-S.base>=S.stacksize){S.base=(char*)realloc(S.base,(S.stacksize+10)*sizeof(char));if(!S.base)returnERROR; S.top=S.base+S.stacksize;S.stacksize+=10;}*S.top++=ch;returnOK;}charCompare(char&e,
4、charch){switch(e){case'+':if(ch=='+'
5、
6、ch=='-'
7、
8、ch==')')return'>';elsereturn'<';break;case'-':if(ch=='+'
9、
10、ch=='-'
11、
12、ch==')')return'>'; elsereturn'<';break;case'*':if(ch=='(')return'<';elsereturn'>';break;case'/':if(ch=='(')return'<';elsereturn'>';break;cas
13、e'(':if(ch==')')return'=';elsereturn'<'; break;case')':return'>';break;}}intCal(chara,chartheta,charb){ints;a-=48;b-=48;switch(theta){case'+':s=a+b;break;case'-':s=a-b;break;case'*':s=a*b; break;case'/':s=a/b;break;}returns;}intStackEmpty(StackS){if(S.to
14、p==S.base)returnOK;returnERROR;}intOperator(){StackCS;StackNS;charch,e; chara,b,theta;InitStack(CS);InitStack(NS);//Push(CS,'=');ch=getchar();while(ch!='='){if(ch>='0'&&ch<='9'){Push(NS,ch);ch=getchar();if(ch>='0'&&ch<='9'){Pop(NS,a); Push(NS,((a-48)*10+
15、(ch-48))+48);ch=getchar();}}else{if(StackEmpty(CS)){Push(CS,ch);ch=getchar();continue; }GetTop(CS,e);switch(Compare(e,ch)){case'<':Push(CS,ch);ch=getchar();break;case'=':Pop(CS,e);ch=getchar();break;case'>':Pop(CS,theta);Pop(NS,a); Pop(NS,b);Push(NS,Cal(
16、b,theta,a)+48);break;}}}while(Pop(CS,theta)){Pop(NS,a);Pop(NS,b);Push(NS,(Cal(b,theta,a)+48));}GetTop(NS,ch); return(ch-48);}intmain(){printf("%d",Operator());return0;}输入格式第一行:一个算术表达式输出格式第一行:算术表达式的值 输入样例3*(9-7)=(0-12)*((