Python 中的后缀转中缀转换

2024 年 8 月 29 日 | 阅读 3 分钟

中缀表达式:中缀表达式将运算符置于两个操作数之间。操作数本身也可以包含运算符。尽管相对于中间运算符,该表达式将是一个中缀表达式。

中缀表达式的格式为

示例: (X + Y) * (X1 + Y1)

后缀表达式:后缀表达式将运算符置于两个操作数之后。操作数本身也可以包含运算符。尽管相对于末尾的运算符,该表达式将是一个后缀表达式。

后缀表达式的格式为

示例: XY - X1Y1+* (中缀:(X - Y) * (X1 + Y1))

后缀表达式也称为逆波兰表达式。计算机被设计用来计算表达式,最常使用后缀形式,有时也使用前缀形式。然而,对于我们来说,理解和计算后缀表达式是困难的。

后缀表达式很复杂

后缀表达式可能非常复杂,其中包含按特定顺序排列的多个括号和运算符。我们习惯于解决中缀表达式。因此,我们需要将前缀表达式转换为中缀表达式。

以下是一些示例输入和输出,以便更好地理解当前问题。

示例

输入: xyz++

输出: (x + (y + z))

输入: xy*z+

输出: ((x*y)+z)

算法

  1. 我们将创建一个 while 循环,循环条件是直到字符串中还有符号为止。
  2. 解释器将逐个读取符号
  3. 如果符号是操作数,则将其推入堆栈。
  4. 否则,如果符号是运算符,我们将从堆栈中弹出两个项目。我们将运算符与值作为其参数插入,并用它们构造一个字符串。然后我们将此字符串推回堆栈。
  5. 如果堆栈中只有一个值,则该值就是所需的字符串。

这是此算法在 Python 中的实现

代码

输出

The infix expression is: 
((x*y)+z) 

时间复杂度:此算法的时间复杂度为 O(n),其中 n 是给定前缀字符串的长度。

辅助空间:由于我们将字符串的符号存储在堆栈中,因此此程序占用 O(n) 的内存空间。