-1

我了解如何编写不带括号的 java 算法。

  1. 创建两个堆栈:一个操作数堆栈和一个运算符堆栈。
  2. 当我们阅读一个表达式时,不断地在一个中添加操作符,在另一个中添加操作数。
  3. 优先级较低的运算符不能存储在优先级较高的运算符上。在这种情况下,我们弹出该运算符并将其应用于操作数堆栈中的顶部操作数并将结果保留在原位。

但如果它涉及括号,如[] or {} or (). 评估表达式的逻辑是什么?例如

([12*3] + (8/2)) + (5+5)/(4*2)-3+(7-3)
4

2 回答 2

3

您正在描述 Dijkstra 的调车场算法的一个奇怪变化。Dijkstra 的版本在过去 50 年中一直是标准,它处理分组操作(括号、方括号)很好。

于 2013-09-02T12:44:08.717 回答
0

评估算术表达式的一种常用方法是开发或查找算术表达式的语法,例如参见此处http://www.csse.monash.edu.au/~lloyd/tildeProgLang/Grammar/Arith-Exp/然后编码“递归下降解析器”。这些程序的结构非常接近语法。一旦你看到一个,你就会欣赏这种方法。

于 2013-09-02T12:07:31.117 回答