周六900C++班级-2023.2.18-栈2
栈练习2
- 请写出使用stack头文件定义一个名称为q的整型栈_stack<int>q;_____
- 设当前有栈q,元素x,请写出将元素x入栈push的程序q.push(x);
- 设当前有栈q,元素x,请写出 出栈pop 的程序q.pop();
- 设当前有栈q,元素x,请写出 获取栈顶top 的程序q.top();
- 设当前有栈q,元素x,请写出 判断空栈empty 的程序q.empty();
- 设当前有栈q,元素x,请写出 获取栈中元素size 的程序q.size();
- 设当前有栈q,元素x,请写出 清空栈中元素clear 的程序while(!q.empty())q.pop();
- 在执行出栈pop、栈顶top以及清空clear操作时,应该提前判断栈是否为空empty,不然会导致程序运行时错误RE(√)
- 中缀表达式1+2的后缀表达式为1 2 +(√)
- 中缀表达式1+2*4的后缀表达式为1 2 4 * +(√)
- 中缀表达式1+2*(3-4)的后缀表达式为1 2 3 4 - * +(√)
- 后缀表达式2 3 + 4 *的中缀表达式为(2+3)*4 (√)
- 后缀表达式2 3 * 4 +的中缀表达式为2*(3+4)(×) 2*3+4
- 后缀表达式1 2 + 3 4 + * 2 +的中缀表达式为(1+2)*(3+4)+2(√)
- 前缀表达式* + 1 2 + 3 4 的计算结果是21(√)
- 前缀表达式+ * 1 2 3的中缀表达式是1*2+3(√)
- 中缀表达式1+2+3的前缀表达式是+ 1 + 2 3 或 + + 1 2 3
- 字符数组的atof()方法是将字符串变成浮点数(√)
- 字符数组的atoi()方法是将字符串变成整型
- 字符数组的atol()方法是将字符串变成长整型
5695: 数据结构―逆波兰表达式
描述
逆波兰表达式是一种把运算符后置的算术表达式,例如普通的表达式2+3的逆波兰表示法2 3 +。逆波兰表达式的优点是运算符之间不必有优先级关系,也不用括号,
例如(2+3)*4的波兰表达式为2 3 + 4 *;本题求解逆波兰表达式的值,其中运算法只有* + - /.每个数据均为小于10的正整数。
输入
输入数据有多组,每组为一行逆波兰表达式,其中运算符和运算数之间用空格表示,不超过50个字符。
输出
每组在一行中输出逆波兰表达式的值,保留2位小数。
样例输入
2 3 + 4 *
样例输出
20.00
#include<bits/stdc++.h> using namespace std; char a[1001]; int f; double cal(double x,double y,char op) { switch(op) { case '+':return x+y;break; case '-':return y-x;break; case '*':return x*y;break; case '/':return y/x;break; } } int main() { while(cin>>a) { f = 1; stack<double>q; q.push(atof(a)); while(getchar()!='\n') { cin>>a; if(a[0]>='0' && a[0]<='9')q.push(atof(a)); else{ double x = q.top();q.pop(); double y = q.top();q.pop(); double z = cal(x,y,a[0]); q.push(z); } } printf("%.2f\n",q.top()); } return 0; }