OJ.evalRPN逆波兰表达式

Posted mbf330

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OJ.evalRPN逆波兰表达式相关的知识,希望对你有一定的参考价值。

来自某扣的OJ小练习
根据 逆波兰表示法,求表达式的值。
有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。

说明:
整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。

解决方法:
建立一个栈,遇到数字便入栈,遇到运算符便运算,使栈顶数据作为右值,栈顶的前一个值作为左值,运算之后的结果继续入栈,最终返回栈中唯一数据,即栈顶即可。

int evalRPN(vector<string>& tokens) 
    
    	//建立栈
        stack<int> st;
        //遍历tokens进行操作
        for(auto& str:tokens)
        
        	如果是运算符,进行运算后入栈
            if(str=="+"||str=="-"||str=="*"||str=="/")
            
            	//定义运算符右值并将其出栈,之后的栈顶数据即为运算符左值
                int right=st.top();
                st.pop();
                //定义左值并将其出栈
                int left=st.top();
                st.pop();
                //进行运算后继续入栈,进行下一步操作,继续将int值入栈或继续进行运算
                if(str=="+")st.push(left+right);
                if(str=="-")st.push(left-right);
                if(str=="*")st.push(left*right);
                if(str=="/")st.push(left/right);
            
            //将tokens中的string型转为int型,并入栈
            else
            
                st.push(stoi(str));
            
        
        return st.top();
    

图解:

以上是关于OJ.evalRPN逆波兰表达式的主要内容,如果未能解决你的问题,请参考以下文章

C语言 逆波兰表达式 算法

递归--逆波兰表达式

c语音编程,逆波兰表达式求值

逆波兰表达式

逆波兰算术表达式 C语言

逆波兰表达式