资源描述:
《实验2 栈的应用-算术表达式计算》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、浙江大学城市学院实验报告课程名称数据结构与算法实验项目名称实验二栈的应用---算术表达式的计算学生姓名蓝礼巍专业班级学号实验成绩指导老师(签名)日期一.实验目的和要求1.进一步掌握栈的基本操作的实现。2.掌握栈在算术表达式的计算方面的应用。二.实验内容1.编写程序利用栈将中缀表达式转换成后缀表达式,即从键盘输入任一个中缀表达式(字符串形式),转换成后缀表达式后,将后缀表达式输出。假设:中缀表达式包含圆括号()及双目运算符+、-、*、/、^(乘方)。要求:把栈的基本操作的实现函数存放在头文件stack1.h中(栈元素的类型为char),在主
2、文件test6_2.cpp中包含将中缀表达式S1转换成后缀表达式S2的转换函数voidChange(char*S1,char*S2)及主函数,在主函数中进行输入输出及转换函数的调用。2.选做:编写利用栈对后缀表达式进行求值的函数doubleCompute(char*str),以计算从前述程序得到的后缀表达式的值。要求:把栈的基本操作的实现函数存放在头文件stack2.h中(栈元素的类型为double),在主文件test6_2.cpp中添加后缀表达式求值函数,并在主函数中增加调用求值函数及输出结果值的语句。3.填写实验报告,实验报告文件取名
3、为report2.doc。4.上传实验报告文件report2.doc与源程序文件stack1.h、stack2.h(若有)及test6_2.cpp到Ftp服务器上你自己的文件夹下。三.函数的功能说明及算法思路包括每个函数的功能说明,及一些重要函数的算法实现思路VoidInitStack2(Stack2&S)初始化voidPush(Stack1&S,ElemType1item)元素插入ElemType1Pop(Stack1&S)删除栈顶并返回ElemType1Peek(Stack1&S)读取元素boolEmptyStack(Stack1&S
4、)判断是否为空voidClearStack(Stack1&S)清除栈四.实验结果与分析包括运行结果截图等五.心得体会记录实验感受、上机过程中遇到的困难及解决办法、遗留的问题、意见和建议等。【附录----源程序】Cpp:#include#include#includetypedefcharElemType1;structStack1{ElemType1*stack;inttop;intMaxSize;};#include"stack1.h"typedefdoubleElemTyp
5、e2;structStack2{ElemType2*stack;inttop;intMaxSize;};#include"stack2.h"intprecedence(charop){switch(op){case'+':case'-':return1;case'*':case'/':return2;case'(':case'@':default:return0;}}voidChange(char*S1,char*S2){Stack1R;InitStack(R);Push(R,'@');inti=0,j=0;charch=S1[i];wh
6、ile(ch!=' '){if(ch=='')ch=S1[++i];elseif(ch=='('){Push(R,ch);ch=S1[++i];}elseif(ch==')'){while(Peek(R)!='(')S2[j++]=Pop(R);Pop(R);ch=S1[++i];}elseif(ch=='+'
7、
8、ch=='-'
9、
10、ch=='*'
11、
12、ch=='/'){charw=Peek(R);while(precedence(w)>=precedence(ch)){S2[j++]=w;Pop(R);w=Peek(R);}Push(R,
13、ch);ch=S1[++i];}else{if((ch<'0'
14、
15、ch>'9')&&ch!='.'){cout<<"中缀表达式错误!"<='0'&&ch<='9')
16、
17、ch=='.'){S2[j++]=ch;ch=S1[++i];}S2[j++]='';}}ch=Pop(R);while(ch!='@'){if(ch=='('){cerr<<"expressionerror!"<