我正在尝试实现一个没有括号的Shutting-yard算法,但我无法理解它。我试过维基百科,但条目真的很糟糕。我在实现代码时应该没有什么问题,但如果我不明白,我就无法实现它。
现在:这个算法是如何工作的?
以下是我的理解:
从左到右,所有数字都添加到输出队列中,所有操作数都添加到堆栈中。到达末尾后,您将弹出所有操作数并将它们添加到输出中
Expression: 2+5*4+3/5 ( = 2+20+0.6 = 22.6 ) Stack: +*+/ ( -> top ) OutputQueue: 5 3 4 5 2 ( -> exits)
现在我弹出堆栈并将其添加到队列中
OutputQueue: (insert ->) + * + / 5 3 4 5 2 ( -> exit)
据我了解,表格应该是:25435/+*+
让我们尝试解决它:
5/3 ~ 1.6 + 4 ~= 5.6 * 5 ~= 28 + 2 ~= 30 (or 30.3 recurring .3 if you insist)
编辑:我确信我在这里使用的反向波兰符号是正确的,所以这不应该是问题。
我知道我在做一些愚蠢的事情,但对于我的一生,我无法弄清楚。
我认为如果有人能指出我的逻辑中的错误,那将很有帮助,因为算法应该很好,因为它来自维基百科,而且我看到其他人向我指出了它。所以它必须是好的,我只是在某个地方搞砸了。
是队列吗?我很确定我可以很好地处理逆波兰符号。