创建前缀表示法表达式

时间:2013-04-19 02:03:18

标签: java

我正在尝试将表达式更改为前缀表示法。我能够找出后缀表示法,我想知道在创建我的前缀类时是否可以使用我的postfix类的基本模板。我想要表达像...... (6 *(24 + 81))并且输出为:* 6 + 24 81.这是否可以不跟踪水平?...当我的循环进入表达式的括号部分时,我是否需要跟踪变量?我只是很难描绘结构是如何工作的。

这是我的后缀代码:

    static Stack operatorStack = new Stack();
String ConvertToPostfix(String exp) {
    exp = "("+exp+")";
    int i;
    char token;
    String output = "";

    for (i = 0; i < exp.length(); i++) {
        token = exp.charAt(i);
        if (Character.isLetterOrDigit(token) == true)
            output += token;
        else if (token == '(')
            operatorStack.push(token);
        else if (token == ')') {
            char topChar;
            while ((topChar = peekAtTop()) != '(') {
                output += topChar;
                popAtTop();
            }

        operatorStack.pop();
        } 
        else {
            while (priority(token) <= priority(peekAtTop())) {
                output += peekAtTop();
                popAtTop();
            }
            operatorStack.push(token);
        }
}
    return output;

}

1 个答案:

答案 0 :(得分:2)

Essentialy,expressions are tree structures

以下是对此的随机说明: 3 * ((7 + 1) / 4 + (17 - 5)

要更改线性表示(即表达式为字符串),只需更改遍历树的方式即可。上面链接的维基百科文章包含所有三个例子。

您需要做的是:

  • 了解如何代表trees in Java(总是很方便);
  • 将您的表情解析为树(相当简单),StringTokenizer是您的朋友;
  • 将三个遍历过程转换为Java;
  • 打电话给你的教授要求的任何程序。 (BTW听教授更不会受伤。)

希望这有帮助!