java 数据结构--中缀表达式

9 + (3 - 1) * 3 + 10 / 2

上面这个是我们平常用到的表达式,他的结构是数字在两边,运算符号在中间,我们看起来更加的舒服,但是在计算机来看就比较麻烦了

所以,计算机计算一般都是后缀表达式,所以上面的式子就变成了

9 3 1 - 3 * + 10 2 / +

后缀表达式求值

9 3 1 - 3 * + 10 2 / +
9 2 3 * + 10 2 / +
9 6 + 10 2 / +
15 10 2 / +
15 5 +
20

这里写图片描述

中缀表达式转为后缀表达式

中缀表达式转后缀表达式:数字输出,运算符进栈,括号匹配出栈,栈顶优先级高出栈

9 + (3 - 1) * 3 + 10 / 2 -> 9 3 1 - 3 * + 10 2 / +

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
中缀表达式是我们常见的数学表达式的一种表示方法,例如"3 + 4 * 2 - 5"。但是在计算机中,中缀表达式并不方便进行计算,因此我们需要将其转换为后缀表达式(逆波兰表达式)来求值。 我们可以使用栈来处理中缀表达式的求值。具体的方法如下: 1. 创建一个空栈和一个空列表来存储中间和最终结果。 2. 遍历中缀表达式中的每一个字符。 3. 如果遇到操作数(数字),直接将其添加到列表中。 4. 如果遇到运算符,分以下几种情况处理: - 如果栈为空,或者栈顶为左括号,则直接将运算符入栈。 - 如果栈顶为运算符,并且栈顶运算符的优先级大于当前运算符,则将栈顶运算符出栈,并加入到列表中,然后继续比较当前运算符与新的栈顶运算符的优先级。 - 最后将当前运算符入栈。 5. 如果遇到左括号,直接将其入栈。 6. 如果遇到右括号,则将栈中的运算符依次出栈,加入到列表中,直到遇到左括号为止。 7. 遍历完中缀表达式后,将栈中剩余的运算符依次出栈,加入到列表中。 8. 最后,遍历列表中的元素进行计算。如果遇到操作数,直接入栈;如果遇到运算符,从栈中弹出两个操作数,并进行相应的运算,然后将运算结果重新入栈。 9. 最终,栈中只剩下一个数,即为中缀表达式的求值结果。 通过上述方法,我们可以实现对中缀表达式的求值,而且时间复杂度为O(n),其中n为表达式的长度。这种方法利用了栈的特性,在处理运算符时将其按照优先级依次出栈,确保了运算的正确顺序,并得到了最终的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值