周六900C++班级-2023.2.18-栈2

栈练习2

  1. 请写出使用stack头文件定义一个名称为q的整型栈_stack<int>q;_____
  2. 设当前有栈q,元素x,请写出将元素x入栈push的程序q.push(x);
  3. 设当前有栈q,元素x,请写出 出栈pop 的程序q.pop();
  4. 设当前有栈q,元素x,请写出 获取栈顶top 的程序q.top();
  5. 设当前有栈q,元素x,请写出 判断空栈empty 的程序q.empty();
  6. 设当前有栈q,元素x,请写出 获取栈中元素size 的程序q.size();
  7. 设当前有栈q,元素x,请写出 清空栈中元素clear 的程序while(!q.empty())q.pop();
  8. 在执行出栈pop、栈顶top以及清空clear操作时,应该提前判断栈是否为空empty,不然会导致程序运行时错误RE(√)
  9. 中缀表达式1+2的后缀表达式为1 2 +(√)
  10. 中缀表达式1+2*4的后缀表达式为1 2 4 * +(√)
  11. 中缀表达式1+2*(3-4)的后缀表达式为1 2 3 4 - * +(√)
  12. 后缀表达式2 3 +  4 *的中缀表达式为(2+3)*4 (√)
  13. 后缀表达式2 3 * 4 +的中缀表达式为2*(3+4)(×) 2*3+4
  14. 后缀表达式1 2 + 3 4 + * 2 +的中缀表达式为(1+2)*(3+4)+2(√)
  15. 前缀表达式* + 1 2 + 3 4 的计算结果是21(√)
  16. 前缀表达式+ * 1 2 3的中缀表达式是1*2+3(√)
  17. 中缀表达式1+2+3的前缀表达式是+ 1 + 2 3 + + 1 2 3
  18. 字符数组的atof()方法是将字符串变成浮点数(√)
  19. 字符数组的atoi()方法是将字符串变成整型
  20. 字符数组的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;
}

 

posted @ 2023-02-18 13:04  CRt0729  阅读(33)  评论(0编辑  收藏  举报