逆波兰表达式实验报告

逆波兰表达式实验报告

ID:35238038

大小:259.14 KB

页数:6页

时间:2019-03-22

逆波兰表达式实验报告_第1页
逆波兰表达式实验报告_第2页
逆波兰表达式实验报告_第3页
逆波兰表达式实验报告_第4页
逆波兰表达式实验报告_第5页
资源描述:

《逆波兰表达式实验报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、数据结构实验报告HUNANUNIVERSITY课程实习报告题目长浮点型逆波兰表达式求值学生姓名毛宇锋吴淑珍王小玉学生学号162022专业班级信息安全一班指导老师夏艳刘炜完成日期2014.4.8-6-数据结构实验报告一、需求分析读入一个后缀表达式,利用堆栈来计算该表达式的值,同时要效验后缀表达式是否正确。二、概要设计抽象数据类型为实现上述程序的功能,应以数据元素为长浮点型的栈来存储用户的输入,以及计算出的结果。算法的基本思想由于读入屏幕的字符,所以第一步是区分字符代表数值还是运算符,此外,还应该对字符是否为小数点做一个特别的判断。当确定系统读入的是数值时,应以double型将数值

2、压入栈中,当确定读入的是运算符时,首先判断当前栈中的数值是否够运算(即至少有两个元素在栈中),满足该条件后分别弹出栈顶的两个元素,然后对其进行系统要求的运算,重新压入栈中。程序的流程程序由三个模块组成:(1)输入模块:循环输入字符,当遇到#号时结束(2)计算模块:将输入的字符转化为相应的长浮点型数字并输出(3)输出模块:显示最终计算结果三、详细设计物理数据类型设计的关键在于读取字符型并转化为长浮点型算法的具体步骤循环输入字符串1.判断当前的输入是否为数字,当结果为真时,执行字符串转换为长浮点型数的函数;2.判断是否为操作符,并给定每一个操作符返回相应的计算结果。算法的时空分析由

3、于在循环内的操作都为时间复杂度为θ(1)的,故算法的时间复杂度取决于输入字符的多少,令输入的字符为n时,算法的时间复杂度应该为θ(n)。空间复杂度:给定栈的大小为10,即允许最多压入十个元素而不进行任何运算,由于逆波兰表达式通常最多输入两个元素即进行一次运算,所以栈的大小至少为2,这里给定10在空间的开销也很小。输入和输出的格式输入:在字符界面上输入一个后缀表达式,其中两相邻操作数之间利用空格隔开。以“#”表示结束。输出:如果该后缀表达式正确,那么在字符界面上输出其结果,计算结果小数点后面保留两位有效数字,如果不正确,请在字符界面上输出表达式错误提示。五、测试结果为了验证测试具

4、有普遍性,分别用个位整数、个位小数、多位整数、多位小数进行运算,如输入:40.2+10*3.6–3/即计算((4+0.2)*10-3.6)/3结果应该等于12.8下图为程序运行结果:-6-数据结构实验报告六、用户使用说明1、本程序的运行环境为DOS操作系统,3(2).cpp2、运行程序时输入的数字应以空格隔开,以#号结束输入七、实验心得为了实现浮点型逆波兰表达式的运算,先后思考了很多种方法,最后发现令输入为字符串并将其通过一个函数更改为double型数字是比较好的一个思路,通过实验也对string操作进行了复习,但是程序也有一定的限制,比如不能输入超过16位的数据。七、附录主程

5、序及注释:#include#include#include#includeusingnamespacestd;templateclassstack{private:intmaxSize;inttop;E*listArray;public:stack(intsize=10){maxSize=size;top=0;listArray=newE[size];}~stack()-6-数据结构实验报告{delete[]listArray;}voidpush(constE&it){assert

6、(top!=maxSize,"Stackisfull");listArray[top++]=it;}Epop(){assert(top!=0,"Stackisempty");returnlistArray[--top];}constE&topValue()const{assert(top!=0);returnlistArray[top-1];}intlength()const{returntop;}};boolisNum(charc)//判断该字符是否为数字{if(c>='0'&&c<='9')returntrue;elsereturnfalse;}boolisOperator

7、(charc)//判断该字符是否为运算符{if(c=='+'

8、

9、'-'

10、

11、'*'

12、

13、"/")returntrue;elsereturnfalse;}doubleoperation(doublenum1,doublenum2,charc)//对于给定的运算符将他变成相应的数字{switch(c){case'+':returnnum1+num2;case'-':returnnum2-num1;-6-数据结构实验报告case'*':returnnum2*num1;case'/':returnnum

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

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

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