【LeetCode.栈.150】逆波兰表达式求值/后缀表达式 + 前缀表达式

一、中缀表达式

在后缀表达式(可以通过中缀表达式转换过来)之前,先了解中缀表达式

【LeetCode.栈.150】逆波兰表达式求值/后缀表达式 + 前缀表达式_第1张图片

【LeetCode.栈.150】逆波兰表达式求值/后缀表达式 + 前缀表达式_第2张图片


二、逆波兰表达式(后缀表达式)

将中缀表达式中的数组变成栈,再准备一个栈

【LeetCode.栈.150】逆波兰表达式求值/后缀表达式 + 前缀表达式_第3张图片

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        stack<int> st;

        for(const auto& e : tokens)
        {
            if(e == "+" || e == "-" || e == "*" || e == "/")
            {
                int right = st.top();//右操作数
                st.pop();
                int left = st.top();//左操作数
                st.pop();
                
                switch(e[0])
                {
                    case '+':
                        st.push(left + right);
                        break;
                    case '-':
                        st.push(left - right);
                        break;
                    case '*':
                        st.push(left * right);
                        break;
                    case '/':
                        st.push(left / right);
                        break;
                }
            }
            else
            {
                st.push(stoi(e));
            }
        }

        return st.top();
    }
};

你可能感兴趣的:(Practice,makes,perfect.,力扣,栈,逆波兰表达式,中缀表达式,后缀表达式)