雅礼上课

今天我们学了栈,栈是一种先进后出,后进先出的图表如下:

老师讲了一道例题,后缀表达式:

后缀表示法也叫逆波兰表示法(前缀就是波兰表示法),由于所有的操作符都在操作数的后面,所以被称为后缀表示法。

中缀表示法的操作符在操作数之间,也是最符合人的逻辑。前缀表示法的操作符在操作数之前,它和后缀表示法一样,都是为了方便计算机计算,因为在后缀或前缀中没有括号,也不存在优先级处理的问题,直接利用栈进行计算。

思路:现将最开始输入的2个数进行后面符号的运算,然后在和后面的常数进行常数后面的符号的运算。。。。。。最后输出数组的最后一项

代码如下(有注释):

#include <bits/stdc++.h>
using namespace std;
char c[1005];
int a[1005];
int main()
{
    int m;
    gets(c);//输入
    int top=0;// top表示当前最高值
    for(int i=0;i<strlen(c);i++){
        switch(c[i]){
            case ' ':break;//如果没有数,跳出
            case '+':m=a[top-1]+a[top];top--;a[top]=m;break;//如果是加号,就将两数相加,top返回上一层,更新a[top]的值为a+b
            case '-':m=a[top-1]-a[top];top--;a[top]=m;break;//如上
            case '*':m=a[top-1]*a[top];top--;a[top]=m;break;//如上
            case '/':m=a[top-1]/a[top];top--;a[top]=m;break;//如上
            default a[++top]=c[i]-48;//如果是常数项,top加一层,且a[top]更新为c[i]的int值
        }
    }
    cout<<a[top];//输出
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/jr-ag/p/8964396.html
今日推荐