【发布时间】:2014-04-08 17:00:16
【问题描述】:
这是理论上的:
我必须评估一个已经从 infix 转换为 postfix 的表达式。后缀保存在Queue 中,因为我想避免使用String。这样我就知道数字之间的区别在哪里,我可以按“正确”的顺序访问它。
看起来像这样:
// Original expression: 2+(3+1)-(5-3)^2*3-1
Queue: [2.0, 3.0, 1.0, +, +, 5.0, 3.0, -, 2.0, ^, 3.0, *, -,1.0, -]
现在我想使用两个堆栈:
- 原始栈(已经被队列内容预先填满)
- 和目标堆栈
将后缀表达式从一个传递到另一个,同时询问当前元素是否是一个数字或运算符并计算连续数字。
如果我到达一个操作员并且数量至少为 2,我将执行该操作并将其推送到目标堆栈上。到达原始堆栈的末尾(现在为空),我会将所有内容传回给它并重新开始,直到只剩下结果。
我现在问我:
- 这是一种好方法还是我应该尝试检测
NumberNumberOperator类型的所有模式并一次性处理它们? - 如果第二个选项是要走的路,怎么办?
【问题讨论】:
-
听起来很复杂。为什么不只是一堆数字。如果您从队列中读取一个数字,请将其压入堆栈。如果您读取一个运算符,将其操作数从堆栈中弹出,执行操作,然后将结果推回。如果操作数不存在,则抛出异常。
-
好吧,通过阅读我理解的维基百科。删除了我的评论。
标签: java stack postfix-notation