数据结构:表达式的前缀表达式和后缀表达式

2025-03-13 08:17:09
推荐回答(1个)
回答1:

  1. A ^ B * C - D + E / (F / (G + H))

简单说下解题思路,仅供参考。

  • 首先找到前两个操作数,在这里是AB,取离它最近的那个符号,是^,组合起来,作为一项,这样表达式变成 + - * (A ^ B) C D / E / F + G H

  • 继续这样,前两个操作数是(A ^ B)和C,符号是*,合并作为一项,变成 + - (A ^ B * C) D / E / F + G H

  • 继续,变成 + (A ^ B * C - D) / E / F + GH

  • 这个时候,+的一个操作数是(A ^ B * C - D),另一个操作数是第一个/后边的结果

  • 然后我们看怎么解 / E / F + GH,还是这样,被除数是E,除数是 / F + GH

  • / F + GH的被除数是F,除数是 + G H, 即为(G + H), 这项是F / (G + H)

  • 回到上一步,/ E / F + G H是E / (F / (G + H))

  • 再往上回一步,得到整个表达式。

抽象一点,大概是这样:对于一个表达式,找到第一个操作数,它肯定是它左边紧挨着的那个运算符的左值(比如这道题里的A是第一个操作数,是^的左值)。操作数右边如果是操作数,那么肯定是之前找到的操作符的右值,如果是操作符,重复这个过程


 2. 先把中缀表达式转化为后缀。这个方法到处都能搜到。

后缀表达式 3 2 * 4 2 2 * + 6 3 * - ^ 5 -

这个求值过程应该是没有运算符栈的