中缀表达式转后缀java
时间: 2023-09-05 18:15:09 浏览: 95
中缀表达式转后缀表达式可以使用栈来实现,可以按照以下步骤进行:
1. 初始化一个栈和一个结果字符串。
2. 遍历中缀表达式中的每个字符。
3. 如果当前字符是数字或字母,则将其添加到结果字符串中。
4. 如果当前字符是左括号"(",则将其压入栈中。
5. 如果当前字符是右括号")",则将栈中所有的运算符依次弹出并添加到结果字符串中,直到遇到左括号为止,然后将左括号弹出。
6. 如果当前字符是运算符,比如"+","-","*","/"等,则将栈中所有优先级大于或等于该运算符的运算符依次弹出并添加到结果字符串中,然后将该运算符压入栈中。
7. 遍历完中缀表达式后,如果栈中还有运算符,则将它们依次弹出并添加到结果字符串中。
8. 返回结果字符串即为后缀表达式。
下面是Java代码实现:
```java
import java.util.Stack;
public class InfixToPostfix {
public static String infixToPostfix(String infix) {
Stack<Character> stack = new Stack<>();
StringBuilder postfix = new StringBuilder();
for (int i = 0; i < infix.length(); i++) {
char c = infix.charAt(i);
if (Character.isLetterOrDigit(c)) {
postfix.append(c);
} else if (c == '(') {
stack.push(c);
} else if (c == ')') {
while (!stack.isEmpty() && stack.peek() != '(') {
postfix.append(stack.pop());
}
stack.pop();
} else {
while (!stack.isEmpty() && precedence(c) <= precedence(stack.peek())) {
postfix.append(stack.pop());
}
stack.push(c);
}
}
while (!stack.isEmpty()) {
postfix.append(stack.pop());
}
return postfix.toString();
}
public static int precedence(char c) {
switch (c) {
case '+':
case '-':
return 1;
case '*':
case '/':
return 2;
case '^':
return 3;
default:
return -1;
}
}
public static void main(String[] args) {
String infix = "a+b*(c^d-e)^(f+g*h)-i";
String postfix = infixToPostfix(infix);
System.out.println(postfix); // 输出:abcd^e-fgh*+^*+i-
}
}
```
在上面的代码中,我们使用了一个优先级函数`precedence`来判断运算符的优先级,根据不同的运算符返回不同的优先级值。在主函数中,我们输入了一个中缀表达式,然后调用`infixToPostfix`函数将其转换为后缀表达式,最后输出后缀表达式。
阅读全文