资源描述:
《栈的应用之表达式求值.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
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#defineOVERFL
3、OW-2typedefintStatus;typedefcharSElemType;typedefstructStackNode//创建一个单链表{Statusdata;structStackNode*next;}StackNode,*LinkStack;StatusInitStack(LinkStack&S)//初始化{S=NULL;returnOK;}StatusStackEmpty(LinkStackS){if(!S)returntrue;returnfalse;}StatusPush(LinkStack&S,SElemTypee)//入栈{S
4、tackNode*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)//判断
5、ch是否为运算符{for(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==
18、'/'))return'<';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;}//
19、算术表达式求值的算符优先算法//设OPTR和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'<'
22、:Push(OPTR,ch);cin>>ch;break;case'>':Pop(OPTR,theta);P