算法:使用栈实现后缀表达式转中缀表达式

例子

例题1

  • 后缀表达式表示为:8 4 + 6 2 * -
  • 中缀表达式8+4-6*2

例题2

  • 后缀表达式: 70 30 + 20 * 10 2 / + 3 -
  • 中缀表达式:(70 + 30) *20 + 10 / 2 - 3

例题3

  • 后缀表达式:10 3 * 3 1 - 2 * + 10 2 / -
  • 中缀表达式: 10 * 3 +(3-1)* 2 - 10 / 2

例题3:

  • 后缀表达式表示为:3 5 + 2 * 7 1 /4 - +
  • 中缀表达式2*(3+5)+7/1-4

注意:当前没有小数点,只有加减乘除

题目解析

  • 初始化一个栈。
  • 从左到右扫描后缀表达式中的符号,有两种情况:
  • 如果是数字,则直接压栈。
  • 如果是运算符op,则从栈顶弹出两个元素a和b(b为栈顶元素),然后将(a op b)压栈。
    public static String back_medium(String[] strs){
        Stack<String> stack = new Stack<>();
        for (int i = 0; i < strs.length; i++){
            if (Character.isDigit(strs[i].charAt(0))){ // 是数字
                stack.push(strs[i]);
            }else{  // 不是数字
                if (stack.size() < 2){
                    throw new RuntimeException("表达式错误");
                }
                // 从栈底到栈顶
                String top = stack.pop();
                String button = stack.pop();
                String t = "(" + button+ strs[i] + top + ")";
                stack.push(t);
            }
        }

        if (stack.empty()){
            throw new RuntimeException("表达式错误");
        }


        return stack.pop();
    }

    public static void main(String[] args) {
        System.out.println(back_medium(new String[]{"70", "30", "+", "20", "*", "10", "2", "/", "+", "3", "-"}));
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值