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());
        }

    运行结果:

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

  • 相关阅读:
    POJ 3687 Labeling Balls <<拓扑排序
    FATFS 初学之 f_mount
    STM8 低功耗时钟管理
    还记得 C中带参宏的 "#"号吗?
    8.9并发编程(一)
    8.8网络编程(三)
    8.7网络编程(二)
    8.6网络编程(一)
    7.30反射、元类及项目生命周期
    7.29多态
  • 原文地址:https://www.cnblogs.com/pig-brother/p/7363826.html
Copyright © 2011-2022 走看看