中缀表达式与后缀表达式的转换和计算


目录

  1. 中缀表达式转换为后缀表达式
  2. 后缀表达式的计算

 

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

中缀表达式转换为后缀表达式的实现方式为:

  1. 依次获取中缀表达式的元素,
  2. 若元素为操作数(数字/字母等),则加入后缀表达式中
  3. 若元素为操作符,则压入栈中,此时对比入栈操作符与栈内元素的计算等级,等级大于或等于入栈元素的栈内操作符都将被弹出栈,加入到后缀表达式中
  4. 左括号直接入栈,优先级最高,不弹出栈内元素
  5. 右括号不入栈,而是弹出所有元素加入后缀表达式,直至遇见匹配的左括号,并弹出左括号但不加入后缀表达式中
  6. 当中缀表达式的元素耗尽后,依次弹出栈内元素加入到后缀表达式中。

代码实现过程如下,

完整代码

 1 from linked_list_stack import Stack
 2 
 3 SIGN = {'+': 1, '-': 1, '*': 2, '/': 2, '(': 3}
 4 
 5 
 6 def infix_to_postfix(expr):
 7     global SIGN
 8     out = []
 9     s = Stack()
10     for i in expr:
11         if i in SIGN.keys():
12             # Pop all high level sign except left bracket
13             while s.top():
14                 if SIGN[s.top()] < SIGN[i] or s.top() == '(':
15                     break
16                 out.append(s.pop())
17             # Push sign
18             s.push(i)
19         elif i == ')':
20             # Pop all sign until left bracket encountered
21             while s.top() != '(':
22                 out.append(s.pop())
23             # Pop left bracket
24             s.pop()
25         else:
26             # Push number
27             out.append(i)
28 
29     while s.top():
30         out.append(s.pop())
31     return out
32 
33 
34 if __name__ == '__main__':
35     ep = 'a + b * c + ( d * e + f ) * g'
36     print(' '.join(infix_to_postfix(ep.split(' '))))
View Code

相关文章:

  • 2021-12-28
  • 2022-01-19
  • 2021-12-19
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-08
猜你喜欢
  • 2022-01-19
  • 2021-10-22
  • 2021-06-23
  • 2021-10-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案