逆波兰表达式求值(实验报告及c++源码)

逆波兰表达式求值(实验报告及c++源码)

ID:13144953

大小:45.50 KB

页数:5页

时间:2018-07-20

逆波兰表达式求值(实验报告及c++源码)_第1页
逆波兰表达式求值(实验报告及c++源码)_第2页
逆波兰表达式求值(实验报告及c++源码)_第3页
逆波兰表达式求值(实验报告及c++源码)_第4页
逆波兰表达式求值(实验报告及c++源码)_第5页
资源描述:

《逆波兰表达式求值(实验报告及c++源码)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、数据结构课程实验指导书逆波兰表达式求值一、需求分析1、从键盘中输入一个后缀表达式,该表示包括加减乘除等操作符,以及正整数作为操作数等。2、用堆栈来实现3、测试数据输入:23*1–#输出:23*1--=5二、概要设计抽象数据类型需要一个浮点数栈来存储还没有计算的浮点数或者运算的结果。ADTStack数据成员:intsize;inttop;//分别用于存储栈大小、栈顶位置float*listArray;//存储浮点型数字的数组成员函数:boolpush(floatit);boolpop(float&it);boolisEmpty()

2、;//判断栈为空boolisOne();//判断栈是否只有一个元素算法的基本思想1.逐一扫描字符串,用ascii码进行判断,如果该字符是数字,则利用x=x*10+str[i]-48将数据由字符类型转换为浮点型数据;2.如果字符是‘.’,则将‘.’转化为小数点,并将‘.’后的数据转化为小数部分;3.遇到空格前是数据的,将x押入栈;4.如果该字符是’+’,’-’,’*’或’/’,判断栈里的元素是否少于两个个,如果少于两个,报错;如果大于等于两个,就弹出两个数据,并进行相应的计算;程序的流程输入字符串,程序对字符串依次扫描。扫描一位,

3、处理一位。扫描完成后,判断栈里是不是只有一个数据,若是,得到正确结果;若不是,则表达式出错。三、详细设计物理数据类型用浮点数类型的栈存储运算中要用的数据,需要入栈、出栈,故设计如下的浮点类型的栈:classStack{private:intsize;inttop;float*listArray;public:Stack(intsz=20);~Stack();-5-数据结构课程实验指导书boolpush(floatit);//入栈boolpop(float&it);//出栈boolisEmpty();//判断栈是否为空boolis

4、One();//判断栈里是否只有且仅有一个元素};成员函数的函数体-5-数据结构课程实验指导书Stack::Stack(intsz)//栈构造函数{size=sz;top=0;listArray=newfloat[size];}boolStack::push(floatit){if(top==size)returnfalse;listArray[top++]=it;returntrue;}boolStack::pop(float&it){if(top==0)returnfalse;it=listArray[--top];retu

5、rntrue;}boolStack::isEmpty()//判断站是否为空{if(top==0)returntrue;returnfalse;}boolStack::isOne(){if(top==1)returntrue;returnfalse;}Stack::~Stack(){deletelistArray;}-5-数据结构课程实验指导书算法的具体步骤用switch语句实现1.逐一扫描字符串,用ascii码进行判断,如果该字符是数字,则利用x=x*10+str[i]-48将数据由字符类型转换为浮点型数据;2.如果字符是‘.’

6、,则将‘.’转化为小数点,并将‘.’后的数据转化为小数部分;3.遇到空格前是数据的,将x押入栈;4.如果该字符是’+’,’-’,’*’或’/’,判断栈里的元素是否少于两个个,如果少于两个,报错;如果大于等于两个,就弹出两个数据,并进行相应的计算;算法的时空分析因为入栈、出栈的时间复杂度均为Θ(1),所以时间的复杂度主要取决于字符串的长度,空间也同样取决于字符串长度。时间复杂度为Θ(n)。输入和输出的格式输入:23*1–#输出:23*1--=5五、测试结果-5-数据结构课程实验指导书六、用户使用说明(可选)1.运行程序后,直接输入

7、后缀表达式;2.用户输入的表达式必须符合后缀表达式的要求,并以‘#’号结束。七、附录(可选)-5-数据结构课程实验指导书#include#includeusingnamespacestd;classStack{private:intsize;inttop;float*listArray;public:Stack(intsz=20);~Stack();boolpush(floatit);//入栈boolpop(float&it);//出栈boolisEmpty();//判断栈是否为空boolis

8、One();//判断栈里是否一个元素};Stack::Stack(intsz)//栈构造函数{size=sz;top=0;listArray=newfloat[size];}boolStack::push(floatit){if(top==size)return

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

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

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