逆波兰表达式求值(Java)

本文详细介绍了逆波兰表达式(后缀表达式)的概念及其解析算法,通过实例展示了如何使用栈数据结构来计算逆波兰表达式的值,提供了一段Java代码实现,并通过测试验证了算法的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是逆波兰表达式?

    逆波兰表达式又叫做后缀表达式。在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,所以,这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法。按此方法,每一运算符都置于其运算对象之后,故称为后缀表示。

例如:逆波兰表达式 4 7 5 - / 解析成普通的算数表达式为4/(7-5)结果为2

12 3 4 + * 6 - 8 2 / +   -->     12*(3+4)-6+(8/2) 

例:输入字符串(逆波兰表达式),字符串由"+”、"-"、"*"、"/"以及数字组成。计算表达式结果?

这里,我们利用栈能很好地解决这一问题:

public static int polen(String str){
        String[] arr = str.split(" ");
        Stack<Integer> s = new Stack<>();
        for(int i=0; i<arr.length; i++){
            if(arr[i].equals("+") || arr[i].equals("-") ||
                    arr[i].equals("*") || arr[i].equals("/")){
                int right = s.pop();//右操作数
                int left = s.pop();//左操作数
                switch(arr[i]){
                    case "+":
                        s.push(left + right);
                        break;
                    case "-":
                        s.push(left - right);
                        break;
                    case "*":
                        s.push(left * right);
                        break;
                    case "/":
                        s.push(left / right);
                        break;
                    default:
                        break;
                }
            }else{
                int num = Integer.parseInt(arr[i]);//String->int
                s.push(num);//将数字压栈
            }
        }
        return s.pop();
    }

测试一下:

public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    String str = sc.nextLine();
    System.out.println(polen(str));
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值