




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构实验报告HUNAN UNIVERSITY课程实习报告题目 长浮点型逆波兰表达式求值学生姓名 毛宇锋 吴淑珍 王小玉学生学号 16 20 22专业班级 信息安全一班指导老师 夏艳 刘炜完 成 日 期 2014.4.8 6 一、 需求分析读入一个后缀表达式,利用堆栈来计算该表达式的值,同时要效验后缀表达式是否正确。二、概要设计抽象数据类型为实现上述程序的功能,应以数据元素为长浮点型的栈来存储用户的输入,以及计算出的结果。算法的基本思想由于读入屏幕的字符,所以第一步是区分字符代表数值还是运算符,此外,还应该对字符是否为小数点做一个特别的判断。当确定系统读入的是数值时,应以double型将数值压入栈中,当确定读入的是运算符时,首先判断当前栈中的数值是否够运算(即至少有两个元素在栈中),满足该条件后分别弹出栈顶的两个元素,然后对其进行系统要求的运算,重新压入栈中。程序的流程程序由三个模块组成:(1) 输入模块:循环输入字符,当遇到#号时结束(2) 计算模块:将输入的字符转化为相应的长浮点型数字并输出(3) 输出模块:显示最终计算结果三、详细设计物理数据类型设计的关键在于读取字符型并转化为长浮点型算法的具体步骤循环输入字符串1.判断当前的输入是否为数字,当结果为真时,执行字符串转换为长浮点型数的函数;2.判断是否为操作符,并给定每一个操作符返回相应的计算结果。算法的时空分析由于在循环内的操作都为时间复杂度为(1)的,故算法的时间复杂度取决于输入字符的多少,令输入的字符为n时,算法的时间复杂度应该为(n)。空间复杂度:给定栈的大小为10,即允许最多压入十个元素而不进行任何运算,由于逆波兰表达式通常最多输入两个元素即进行一次运算,所以栈的大小至少为2,这里给定10在空间的开销也很小。输入和输出的格式输入:在字符界面上输入一个后缀表达式,其中两相邻操作数之间利用空格隔开。以“#”表示结束。输出:如果该后缀表达式正确,那么在字符界面上输出其结果,计算结果小数点后面保留两位有效数字,如果不正确,请在字符界面上输出表达式错误提示。五、测试结果为了验证测试具有普遍性,分别用个位整数、个位小数、多位整数、多位小数进行运算,如输入:4 0.2 + 10 * 3.6 3 /即计算(4+0.2)*10-3.6)/3结果应该等于12.8下图为程序运行结果:六、用户使用说明1、本程序的运行环境为DOS操作系统,3(2).cpp 2、运行程序时输入的数字应以空格隔开,以#号结束输入七、实验心得为了实现浮点型逆波兰表达式的运算,先后思考了很多种方法,最后发现令输入为字符串并将其通过一个函数更改为double型数字是比较好的一个思路,通过实验也对string操作进行了复习,但是程序也有一定的限制,比如不能输入超过16位的数据。七、附录主程序及注释:#include#include#include#includeusing namespace std;templateclass stackprivate:int maxSize;int top;E *listArray;public:stack(int size = 10)maxSize = size ;top = 0;listArray = new Esize;stack()delete listArray;void push(const E& it)assert(top !=maxSize,Stack is full); listArraytop+= it;E pop()assert(top !=0,Stack is empty);return listArray-top;const E& topValue() constassert(top!=0);return listArraytop-1;int length() constreturn top;bool isNum(char c) /判断该字符是否为数字if (c=0 & c=9)return true;elsereturn false;bool isOperator(char c) /判断该字符是否为运算符if (c=+|-|*|/)return true;else return false;double operation(double num1,double num2,char c) /对于给定的运算符将他变成相应的数字switch(c) case +:return num1+num2; case -:return num2-num1;case *:return num2*num1;case /:return num2/num1;double switchNum(char c) /将输入的数字串变成对应的数字int size=strlen(c);char* ptr=strchr(c,.);double num=0,n=0;int i=0;if(ptr) for(i=0;iptr-c;i+) num=num*10+ci-48; for(i=ptr-c+1;isize;i+) n=n*10+ci-48; num+=n*pow(10,-(size-(ptr-c)+1); else for(i=0;isize;i+) num=num*10+ci-48; return num;void main()stack a;char c16;double num,num1,num2;while(cinc)if(c0=#)break; /遇到#时结束程序if(isNum(c0)num=switchNum(c);a.push(num);num=0;else if(isOperator(c0) /当判定操作
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农发行池州市青阳县2025秋招小语种岗笔试题及答案
- 农发行长春市朝阳区2025秋招笔试综合模拟题库及答案
- 广安邻水县中储粮2025秋招面试典型题目及答案
- 国家能源鄂尔多斯市东胜区2025秋招心理测评常考题型与答题技巧
- 国家能源揭阳市榕城区2025秋招笔试言语理解与表达题专练及答案
- 国家能源柳州市柳城县2025秋招半结构化面试模拟30问及答案
- 2025年甘肃省天水市秦安县中医医院招聘编外人员34人模拟试卷及答案详解(必刷)
- 关爱农民工子女服务活动总结
- 参加家长会心得体会
- 员工个人工作总结12篇
- 2025河北水发节水有限公司公开招聘工作人员16人笔试参考题库附答案解析
- 新版中华民族共同体概论课件第十二讲民族危亡与中华民族意识觉醒(1840-1919)-2025年版
- 2025-2026学年人教版(2024)九年级物理全册第十四章 内能的利用(单元同步检测练习)(含答案)
- 第1课时 10的加、减法(教学设计)-2024-2025学年一年级上册数学人教版
- 2025至2030中国聚烯烃行业项目调研及市场前景预测评估报告
- 2025四川达州宣汉县国有资产管理服务中心县属国有企业招聘劳动合同职工26人笔试历年参考题库附带答案详解
- 新教科版小学1-6年级科学需做实验目录
- 《电子商务法律法规》课程标准
- 医院关于印发《即时检验临床应用管理办法》的通知
- 三年级下册书法练习指导全册教案(湖南美术出版社)
- GB/T 17880.5-1999平头六角铆螺母
评论
0/150
提交评论