后缀表达式(逆波兰式)

定义

    逆波兰式,也叫后缀表达式(将运算符写在操作数之后)。逆波兰式在计算机看来是比较简单易懂的结构。逆波兰式能够很好地适应计算机普遍采用的栈式内存结构。

    例如:

    (3 + 4) * 5 - 6

    可以写作:

    3 4 + 5 * 6 -

求解思路

    建立一个栈S 。从左到右读表达式,如果读到操作数就将它压入栈S中,如果读到n元运算符(即需要参数个数为n的运算符)则取出由栈顶向下的n项按操作符运算,再将运算的结果代替原栈顶的n项,压入栈S中 。如果后缀表达式未读完,则重复上面过程,最后输出栈顶的数值则为结束。

具体代码(C)

#include<stdio.h>
#include<stack>
using namespace std;

int main()
{
    stack<char> sk;
    char str[20];
    gets(str);
    
    for(int i = 0;str[i];i++)
    {
        if(str[i] <= '9'&&str[i] >= '0')
        {
            sk.push((str[i]));
        }
        else
        {
            int y = sk.top() - '0';
            sk.pop();
            int x = sk.top() - '0';
            sk.pop();
            
            int z = 0;
            if(str[i] == '+')
            {
                z = x + y;
            }
            else if(str[i] == '-')
            {
                z = x - y;
            }
            else if(str[i] == '*')
            {
                z = x*y;
            }
            else
            {
                z = x/y;
            }
            sk.push(z + '0');
        }
    }
    
    printf("%d",sk.top() - '0');
    
    return 0;
} 

运行结果

    输入3 4 + 5 * 6 -

   

 

posted @ 2022-04-21 11:30  嗯嗯魑嗯嗯  阅读(339)  评论(0编辑  收藏  举报