栈的应用之表达式求值

栈的应用之表达式求值

ID:46449732

大小:141.43 KB

页数:7页

时间:2019-11-23

栈的应用之表达式求值_第1页
栈的应用之表达式求值_第2页
栈的应用之表达式求值_第3页
栈的应用之表达式求值_第4页
栈的应用之表达式求值_第5页
资源描述:

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

1、学生实验报告学院:软件与通信工程学院课程名称:数据结构专业班级:电信141班姓名:学号:014学生实验报告(1)学生姓名学号同组人:无实验项目栈的应用之表达式求值■必修□选修□演示性实验□验证性实验■操作性实验□综合性实验实验地点H113实验仪器台号指导教师黄淑英实验日期及节次一、实验综述1、实验目的及要求掌握栈在表达式求值算法中的应用。2、实验仪器、设备或软件电脑二、实验过程(实验步骤、记录、数据、分析)打开电脑,打开MicrosoftvisualC++6.0、新建、Win32ConosleApplication建一个空工程文件、选择源文件、开始编写程序

2、#include#include#include#include#include#include#include#include#includeconstcharoper[7]={'+','-','*','/','(',')','='};//建立一个一维数组放置运算符#defineMAXSIZE100#defineOK1#defineERROR0#defineOVERFLOW-2ty

3、pedefintStatus;typedefcharSElemType;typedefstructStackNode//创建一个单链表{Statusdata;structStackNode*next;}StackNode,*LinkStack;StatusInitStack(LinkStack&S)//初始化{S=NULL;returnOK;}StatusStackEmpty(LinkStackS){if(!S)returntrue;returnfalse;}StatusPush(LinkStack&S,SElemTypee)//入栈{StackNode*

4、p;p=newStackNode;if(!p)returnOVERFLOW;p->data=e;p->next=S;S=p;returnOK;}StatusPop(LinkStack&S,SElemType&e)//出栈{StackNode*p;if(S==NULL)returnERROR;e=S->data;p=S;S=S->next;deletep;returnOK;}SElemTypeGetTop(LinkStackS)//取栈顶元素{if(S!=NULL)returnS->data;}StatusIn(charch)//判断ch是否为运算符{for

5、(inti=0;i<7;i++){if(ch==oper[i])returntrue;}returnfalse;}//判断运算符优先级charPrecede(chartheta1,chartheta2){if((theta1=='('&&theta2==')')

6、

7、(theta1=='='&&theta2=='='))return'=';elseif(theta1=='('

8、

9、theta1=='='

10、

11、theta2=='('

12、

13、(theta1=='+'

14、

15、theta1=='-')&&(theta2=='*'

16、

17、theta2=='/'))return'<';

18、elsereturn'>';}charOperate(charfirst,chartheta,charsecond)//计算两数运算结果{switch(theta){case'+':return(first-'0')+(second-'0')+48;case'-':return(first-'0')-(second-'0')+48;case'*':return(first-'0')*(second-'0')+48;case'/':return(first-'0')/(second-'0')+48;}return0;}//算术表达式求值的算符优先算法//设O

19、PTR和OPND分别为运算符栈和操作数栈charEvaluateExpression(){charch;SElemTypea,b,theta,x;LinkStackOPND,OPTR;InitStack(OPND);InitStack(OPTR);Push(OPTR,'=');cin>>ch;while(ch!='='

20、

21、GetTop(OPTR)!='='){if(!In(ch)){Push(OPND,ch);cin>>ch;}elseswitch(Precede(GetTop(OPTR),ch)){case'<':Push(OPTR,ch);cin>>c

22、h;break;case'>':Pop(OPTR,theta);P

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

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

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