我正在尝试将表达式更改为前缀表示法。我能够找出后缀表示法,我想知道在创建我的前缀类时是否可以使用我的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;
}
答案 0 :(得分:2)
Essentialy,expressions are tree structures。
以下是对此的随机说明:
要更改线性表示(即表达式为字符串),只需更改遍历树的方式即可。上面链接的维基百科文章包含所有三个例子。
您需要做的是:
StringTokenizer
是您的朋友; 希望这有帮助!