Java:评估后缀表达式

时间:2014-04-08 17:00:17

标签: java stack postfix-notation

这是一个理论上的:

我必须评估一个已经从 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, -]

现在我想使用两个堆栈:

  • origin stack (事先已经填充了队列内容)
  • 和目标堆栈

将后缀表达式从一个传递给另一个,同时询问当前元素是否为操作符号并计算连续数字。

如果我到达操作员且号码数至少为2,我将执行操作并将其推送到目标堆栈。到达原始堆栈的末尾(现在为空)我会将所有内容传回给它并重新开始,直到只留下结果。

我现在问我:

  • 这是一个好方法还是我应该尝试检测NumberNumberOperator类型的所有模式并一次处理它们?
  • 如果第二种选择是要走的路,怎么办呢?

1 个答案:

答案 0 :(得分:1)

没有。你只需要一个堆叠,当你完成任务时,没有什么可以从全部开始了#39;用。

当你将一个数字出列时,按下它:当你使一个操作符出列时,弹出两个值,用这两个操作数计算运算符,然后推送结果。到达输入的末尾时,堆栈中应该只有一个值,即结果。否则输入结果不合理。