有一种特殊的数学符号,称为波兰符号,该数学表达式中的运算符遵循其操作数,如下所示,
1 3 +
上面的表达式等于1 + 3
此符号模式由编译器使用。
当我浏览维基百科时,我发现有两种使用堆栈数据结构实现此算法的方法。
1.) **left to right**
2.) **right to left**
很明显,我了解了使用该机制的从左到右算法
for each token in the postfix expression:
if token is an operator:
operand_2 ← pop from the stack
operand_1 ← pop from the stack
result ← evaluate token with operand_1 and operand_2
push result back onto the stack
else if token is an operand:
push token onto the stack
result ← pop from the stack
在这里,使用了一个堆栈,当找到and运算符时,它仅存储操作数,它弹出操作数并根据运算符计算它们并推入结果。但是,当谈到从右到左算法时,很难理解它是如何工作的,任何人都可以解释以下从右到左算法及其区别。
for each token in the reversed postfix expression:
if token is an operator:
push token onto the operator stack
pending_operand ← False
else if token is an operand:
operand ← token
if pending_operand is True:
while the operand stack is not empty:
operand_1 ← pop from the operand stack
operator ← pop from the operator stack
operand ← evaluate operator with operand_1 and operand
push operand onto the operand stack
pending_operand ← True
result ← pop from the operand stack
据我了解,它使用两个堆栈,一个用于操作符,另一个用于操作数。就是这样。