中缀表达式转后缀表达式java
时间: 2023-10-12 09:25:43 浏览: 123
C++中缀表达式转后缀表达式的方法
5星 · 资源好评率100%
好的,我可以为您介绍一下中缀表达式转后缀表达式的Java实现方法。
中缀表达式转后缀表达式的一般步骤如下:
1. 创建一个栈和一个后缀表达式字符串
2. 从左到右扫描中缀表达式中的每个字符
3. 如果当前字符是数字或字母,将它添加到后缀表达式字符串的末尾
4. 如果当前字符是左括号,将它压入栈中
5. 如果当前字符是右括号,将栈顶元素弹出并添加到后缀表达式字符串中,直到遇到左括号
6. 如果当前字符是运算符,比较它与栈顶运算符的优先级,如果当前运算符优先级小于等于栈顶运算符优先级,则将栈顶运算符弹出并添加到后缀表达式字符串中,直到栈为空或栈顶运算符优先级小于当前运算符优先级,然后将当前运算符压入栈中
7. 重复步骤2到步骤6,直到处理完所有字符
8. 将栈中剩余的运算符依次弹出并加入后缀表达式字符串中
9. 后缀表达式字符串即为转换后的后缀表达式
下面是中缀表达式转后缀表达式的Java实现代码:
```java
import java.util.Stack;
public class InfixToPostfix {
public static void main(String[] args) {
String infix = "2+3*4/(5-2)";
String postfix = infixToPostfix(infix);
System.out.println("Infix expression: " + infix);
System.out.println("Postfix expression: " + postfix);
}
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(); // pop the '('
} 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;
}
}
}
```
这是一个简单的实现,如果您有其他的需求或者问题,可以继续向我提问。
阅读全文