zoukankan      html  css  js  c++  java
  • 逆波兰表达式

    首先,我们要理解什么是逆波兰表达式?逆波兰表达式是将我们平常的运算表达式写出计算机可以理解的表达式,譬如

    正常的表达式(中缀表达式)        ------>        逆波兰表达式(后缀表达式)

    2+3     ------>     2 3 +

    3+2*4     -------->     3 2 4 * +

    (2+3)*(5-1)    -------->  2 3 + 5 1 - *

    它的运行顺序是:将数字压入栈中,当遇到运算符时,取出前两位的数值,再将运算的结果压入栈中,然后接着继续下去。

    下面就是我们的实例代码

    public static void main(String[] args) {
            //计算(3-1)*(2+5)的结果,结果为14,则我们是正确的
            String str= " 3 1 - 2 5 + *";
            String[] split = str.trim().split(" ");
            Stack<Integer> stack=new Stack<>();
            for(String s: split){
                if(s.trim().matches("^-?\d+$")){//判断是否是整数
                    stack.push(Integer.valueOf(s));
                }else if(s.trim().equals("+")){
                    Integer v1 = stack.pop();
                    Integer v2 = stack.pop();
                    stack.push(v2+v1);
                }else if(s.trim().equals("-")){
                    Integer v1 = stack.pop();
                    Integer v2 = stack.pop();
                    stack.push(v2-v1);
                }else if(s.trim().equals("*")){
                    Integer v1 = stack.pop();
                    Integer v2 = stack.pop();
                    stack.push(v2*v1);
                }else if(s.trim().equals("/")){
                    Integer v1 = stack.pop();
                    Integer v2 = stack.pop();
                    stack.push(v2/v1);
                }else{
                    System.out.println("非法字符");
                }
            }
            System.out.println("运算结果:"+stack.pop());
        }

    运行结果:

    这样子虽然电脑能够理解了并且运算出结果,但是这不是我们想要的,我们还是想输入我们平常的表达式,那么我们又如何将正常的表达式转成逆波兰表达式呢?下一遍我们将会讲到,中缀表达式转为后缀表达式。

  • 相关阅读:
    贝叶斯在机器学习中的应用(一)
    使用ajax发送的请求实现页面跳转
    关于welcom-file-list 失效
    在新的线程中使用session 出现的问题
    关于innerHtml= 与 html() 区别
    request.getAttribute()和 request.getParameter()有何区别?
    __STL_VOLATILE
    声明一个返回特定类型函数指针的函数
    关于vue的基础概念
    Vue.js结合vue-router和webpack编写单页路由项目
  • 原文地址:https://www.cnblogs.com/pig-brother/p/7363826.html
Copyright © 2011-2022 走看看