逆波兰表达式求值(实验报告及C++源码)
更新时间:2023-10-17 18:51:02 阅读量: 综合文库 文档下载
- 逆波兰表达式求值c+推荐度:
- 相关推荐
数据结构课程实验指导书
逆波兰表达式求值
一、需求分析
1、从键盘中输入一个后缀表达式,该表示包括加减乘除等操作符,以及正整数作为操作数等。
2、用堆栈来实现 3、测试数据 输入:2 3 * 1 – #
输出:2 3 * 1 -- =5
二、概要设计 抽象数据类型
需要一个浮点数栈来存储还没有计算的浮点数或者运算的结果。 ADT Stack
数据成员:int size; int top; //分别用于存储栈大小、栈顶位置
float *listArray;//存储浮点型数字的数组
成员函数: bool push(float it); bool pop(float& it); bool isEmpty(); //判断栈为空 bool isOne();//判断栈是否只有一个元素 算法的基本思想
1. 逐一扫描字符串,用ascii码进行判断,如果该字符是数字,则利用x=x*10+str[i]-48
将数据由字符类型转换为浮点型数据; 2. 如果字符是‘.’,则将‘.’转化为小数点,并将‘.’后的数据转化为小数部分; 3. 遇到空格前是数据的,将x押入栈;
4. 如果该字符是’+’,’-’,’*’或’/’,判断栈里的元素是否少于两个个,如果少于两个,
报错;如果大于等于两个,就弹出两个数据,并进行相应的计算; 程序的流程
输入字符串,程序对字符串依次扫描。扫描一位,处理一位。扫描完成后,判断栈里是不是只有一个数据,若是,得到正确结果;若不是,则表达式出错。 三、详细设计
物理数据类型
用浮点数类型的栈存储运算中要用的数据,需要入栈、出栈,故设计如下的浮点类型的栈:
class Stack {
private: int size; int top; float *listArray; public: Stack(int sz=20); ~Stack();
- 1 -
数据结构课程实验指导书
bool push(float it);//入栈 bool pop(float& it);//出栈 bool isEmpty();//判断栈是否为空 bool isOne(); //判断栈里是否只有且仅有一个元素 };
成员函数的函数体
return true; Stack::Stack(int sz) //栈构造函数
{ } size=sz; bool Stack::isEmpty() //判断站是否为空 top=0; { listArray=new float[size]; if(top==0) } return true; bool Stack::push(float it) return false; { } if(top==size) bool Stack::isOne() return false; { listArray[top++]=it; if(top==1) return true; return true; } return false; bool Stack::pop(float& it) } { Stack::~Stack() if(top==0) { return false; delete listArray; it=listArray[--top]; }
算法的具体步骤 用switch语句实现 1. 逐一扫描字符串,用ascii码进行判断,如果该字符是数字,则利用x=x*10+str[i]-48
将数据由字符类型转换为浮点型数据; 2. 如果字符是‘.’,则将‘.’转化为小数点,并将‘.’后的数据转化为小数部分; 3. 遇到空格前是数据的,将x押入栈;
4. 如果该字符是’+’,’-’,’*’或’/’,判断栈里的元素是否少于两个个,如果少于两个,
报错;如果大于等于两个,就弹出两个数据,并进行相应的计算; 算法的时空分析
因为入栈、出栈的时间复杂度均为Θ(1),所以时间的复杂度主要取决于字符串的长度,空间也同样取决于字符串长度。时间复杂度为Θ(n)。
输入和输出的格式 输入:2 3 * 1 – #
输出:2 3 * 1 -- =5
五、测试结果
- 2 -
数据结构课程实验指导书
六、用户使用说明(可选)
1. 运行程序后,直接输入后缀表达式;
2. 用户输入的表达式必须符合后缀表达式的要求,并以‘#’号结束。 七、附录(可选) #include
return true; bool push(float it);//入栈
return false; bool pop(float& it);//出栈
} bool isEmpty();//判断栈是否为空
Stack::~Stack() bool isOne();//判断栈里是否一个元素
}; {
delete listArray; Stack::Stack(int sz) //栈构造函数
{ } size=sz; //此函数传进输入的字符串,并对字符串进 top=0; //行扫描并进行相应处理,得到结果(函数声 listArray=new float[size]; //明) } void compute(char* str); bool Stack::push(float it) int main() { { if(top==size) char str[20]; return false; cin.getline(str,20,'#'); listArray[top++]=it; compute(str); return true; return 0; } } bool Stack::pop(float& it) //此函数传进输入的字符串,并对字符串进{ //行扫描并进行相应处理,得到结果(函数体) if(top==0) void compute(char* str) return false; {
- 3 -
数据结构课程实验指导书
Stack aStack; float x=0,y=0,s1,s2,temp; int i; i=0; while(str[i]) { switch(str[i]) {
case '+': //加法运算
if(aStack.isOne()||aStack.isEmpty()) {
cout << \表达式不符合要求\ return; } aStack.pop(s1); aStack.pop(s2); x=s2+s1; aStack.push(x); x=0;i++;break; case '-': //减法运算
if(aStack.isOne()||aStack.isEmpty()) { cout << \表达式不符合要求\ return; }
aStack.pop(s1); aStack.pop(s2); x=s2-s1;
aStack.push(x); x=0; i++; break;
case '*': //乘法运算
if(aStack.isOne()||aStack.isEmpty()) {
cout << \表达式不符合要求\ return; }
aStack.pop(s1); aStack.pop(s2); x=s2*s1;
aStack.push(x); x=0; i++; break;
case '/': //除法运算
if(aStack.isOne()||aStack.isEmpty())
{
cout << \表达式不符合要求\ return; }
aStack.pop(s1); aStack.pop(s2); if(s1==0) {
cout << \分母为0!\return; }
x=s2/s1;
aStack.push(x); x=0; i++; break;
case ' ': //如果是空格,将数据x押入栈中
if(str[i-1]>=48&&str[i-1]<=57) aStack.push(x); x=0; i++; y=0; break;
case '.': //获得小数部分
temp=10.0;
while(str[++i]!=' ') { if(str[i]>=48&&str[i]<=57) y=y+(str[i]-48)/temp; temp*=10; } x+=y; break;
default: //将字符数字转换为浮点型的数字
if(str[i]>=48&&str[i]<=57) {
x=x*10+str[i]-48;
i++; } } }
//判断栈是否只有切仅有一个元素,是就输//出结果
if(aStack.isOne()) {
4 -
-数据结构课程实验指导书
}
}
aStack.pop(x);
cout << str << '=' << x << endl;
- 5 -
正在阅读:
逆波兰表达式求值(实验报告及C++源码)10-17
吉大16秋学期《计算机网络基础》在线作业二满分答案01-16
高英第一册paraphrase汇总(1、2、5、6、9、10、11课)以及课后翻07-06
浙江省住房和城乡建设厅关于规范建设工程施工招标文件计价条款的03-17
13建筑工程施工质量验收统一标准(GB 50300-2001)05-06
团队协作的重要性(总结10篇)04-27
浙江省嘉兴市第一中学2019届高三上学期期末考试生物试卷及答案07-04
上海到临沂物流公司09-05
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 波兰
- C++
- 表达式
- 源码
- 实验
- 报告
- 2204专科2015英语
- 铁碳合金的显微组织及分析-铸铁 - 图文
- 新版dpph自由基清除实验-实验流程图-操作图解-李熙灿-Xican Li
- 丧葬邹氏秘传总录
- 伊利财务报表分析
- 护理管理学的作业及复习资料
- 中国卫浴市场现状分析
- 自动控制作业题答案
- 计算机网络技术习题
- 医院传染病聚集发病、聚集性症候群等异常情况处理机制与流程
- 2013年青山湖区领导信访接待日安排表
- 山西省朔州市平鲁区李林中学高三理科数学《编号19函数图像与变换》小练习
- 力学复习专题简单机械
- oracle试题
- 001第一章 血液的一般检验
- 年产6000万米新型编制水带及2.4融资投资立项项目可行性研究报告(中撰咨询)
- 2010年高考语文复习资料精品
- 第四章 胎儿的生理--心理发展
- 建筑物理复习题
- 放射科预防医疗纠纷和医疗不良事件预案