栈实现表达式的简单求值

栈实现表达式的简单求值

ID:13035781

大小:166.50 KB

页数:5页

时间:2018-07-20

栈实现表达式的简单求值_第1页
栈实现表达式的简单求值_第2页
栈实现表达式的简单求值_第3页
栈实现表达式的简单求值_第4页
栈实现表达式的简单求值_第5页
资源描述:

《栈实现表达式的简单求值》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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)*((

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。