栈的应用之表达式求值电子教案.docx

栈的应用之表达式求值电子教案.docx

ID:57132972

大小:21.27 KB

页数:5页

时间:2020-08-03

栈的应用之表达式求值电子教案.docx_第1页
栈的应用之表达式求值电子教案.docx_第2页
栈的应用之表达式求值电子教案.docx_第3页
栈的应用之表达式求值电子教案.docx_第4页
栈的应用之表达式求值电子教案.docx_第5页
资源描述:

《栈的应用之表达式求值电子教案.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)的运算截图:收集于

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

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

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