我试图实现一个没有括号的Shunting-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)
编辑:我相信我在这里使用的Reverse Polish notation是正确的,所以不应该是问题。
我知道我在做一些愚蠢的事情,但对于我的生活我无法弄清楚。
我认为如果有人能够在我的逻辑中指出错误,这将会有所帮助,因为该算法应该很好,因为它来自维基百科,而且我看到其他人指出了这一点。所以它必须是好的,我只是搞乱了某个地方。
它是队列吗?我很确定我正在处理Reverse Polish notation。