2013-04-19 64 views
-1

我在尝试将表达式更改为前缀表示法。我能够找出后缀符号,我想知道是否可以在创建我的前缀类时使用我的后缀类的基本模板。我想要表达式如... (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; 

} 

回答

2

Essentialy的expressions are tree structures

下面是这方面的一个例证随机: 3 * ((7 + 1)/4 + (17 - 5)

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

你需要做的是:

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

希望能帮到你!