Evaluate Reverse Polish Notation

逆波兰式也就是后序算式,计算后序式的基本思想就是用栈,依次遍历数组,遇到数字,压栈,遇到符号,两次弹栈,将弹出的两个操作数做运算,运算后将结果再压栈,最后

在栈顶的就是要计算的结果。

class Solution {
public:
    int  Words(vector<string> &tokens) {
      stack<int>  st;
      for(int i=0;i<tokens.size();i++)
      {
          int num1=0,num2=0;
         switch(atoi(&tokens[i][0]))
         {

         case '+':
            num1=st.top();
            st.pop();
            num2=st.top();
            st.pop();
            st.push(num1+num2);
            break;
         case '-':
             num1=st.top();
            st.pop();
            num2=st.top();
            st.pop();
            st.push(num1-num2);
            break;
         case '*':
             num1=st.top();
            st.pop();
            num2=st.top();
            st.pop();
            st.push(num1*num2);
            break;
         case '/':
             num1=st.top();
            st.pop();
            num2=st.top();
            st.pop();
            st.push(num1/num2);
            break;
         default:

            st.push(atoi(&tokens[i][0]));
         }
      }
      return st.top();
    }
};

 

posted @ 2014-04-20 22:20  醉剑客  阅读(126)  评论(0编辑  收藏  举报