资源描述:
《数据结构实验(3).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、计算机系数据结构实验报告(2)姓名:孟红波学号:6100410179专业班级:卓越101班实验目的:深入了解栈和队列的特性,学会在实际问题下灵活运用它们。问题描述:表达式求值运算是实现程序设计语言的基本问题之一,也是栈应用的一个典型例子。设计并演示用算符优先级对算术表达式的求解过程。实验要求:文法是一个四元1、算法优先级别如下:'+','-','*','/','(',')','#''+''>','>','<','<','<','>','>','-''>','>','<','<','<','>','>','*''>','>','>','>','<','>','>'
2、,'/''>','>','>','>','<','>','>','(''<','<','<','<','<','=','',')''>','>','>','>','','>','>','#''<','<','<','<','<','','='2、以字符序列的形式从终端输入语法正确、不含变量的算术表达式,利用给出的算符优先级关系,实现对算术四则混合运算的求解过程。实验内容和过程:测试数据:1.输入数据:1+(20+4)/(4-1)正确结果:92.输入数据:2*9-6-(20+4)/(4-1)正确结果:4实验步骤:1、根据给出的算符优先级,设置运算符栈和运算数栈;2
3、、在读入表达式的同时,完成运算符和运算数的识别处理,并将运算数的字符序列形式转换成整数形式,并进行相应的运算;3、调试程序,检查输出结果;4、实验小结。算法分析_代码实验代码如下:#include#include#includeusingnamespacestd;#defineMAX1000structsave1{floatn[MAX];inttop;}stack1;structsave2{charn[MAX];inttop;}stack2;//stack1存储数字,stack2存储运算符号boolstacke
4、mpty(save1s)//判断是否为空{if(s.top==-1)return1;elsereturn0;}boolstackempty2(save2s)//判断是否为空{if(s.top==-1)return1;elsereturn0;}voidpush(save1&s,floate)//将e入栈{if(s.top==MAX-1){cout<<"栈已满"<5、eturn;}s.top++;s.n[s.top]=e;}voidpop(save1&s,float&e)//将栈顶元素出栈,存到e中{if(s.top==-1){cout<<"栈为空"<6、
7、e=='+')return2;if(e=
8、='*'
9、
10、e=='/')return4;if(e=='^')return5;if(e=='(')return0;if(e==')')return7;return-1;}intout(chare)//e在栈外的优先级别{if(e=='-'
11、
12、e=='+')return1;if(e=='*'
13、
14、e=='/')return3;if(e=='^')return6;if(e=='(')return7;if(e==')')return0;return-1;}voidcount(floata,charope,floatb)//进栈计算并计算结果入栈{floatsum;if(
15、ope=='+')sum=a+b;if(ope=='-')sum=a-b;if(ope=='*')sum=a*b;if(ope=='/')sum=a/b;if(ope=='^')sum=pow(a,b);push(stack1,sum);}intmain(){inti=0,len,j,nofpoint,g=0;//表示输入式子的长度。G表示读入的字符是否是字母变量,数字以及运算符floata,b;//a,b用来存储操作数栈中弹出的操作数,便于代入函数中进行计算charline[MAX],operate,temp[20];cout<<"请输入表达式:"<16、;cin>>line;l