import java.util.Stack;
/**
* Created by albert.bai on 2014/11/3.
*/
public class TestStack {
private String testString = null;
private Stack<Character> stack = null;
public TestStack(String testString) {
this.testString = testString;
this.stack = new Stack<Character>();
}
public void analysisString() {
for (int i = 0; i < testString.length(); i++) {
char c = testString.charAt(i);
if (c == '+' || c == '-') {
if (stack.isEmpty() || stack.peek() == '(') {
stack.push(c);
} else {
while (!stack.isEmpty() && (stack.peek() == '*' || stack.peek() == '/' || stack.peek() == '+' || stack.peek() == '-')) {
System.out.print(stack.pop());
}
stack.push(c);
}
} else if (c == '*' || c == '/') {
if (stack.isEmpty() || stack.peek() == '(' || stack.peek() == '-' || stack.peek() == '+') {
stack.push(c);
} else {
while (!stack.isEmpty() && (stack.peek() == '/') || stack.peek() == '*') {
System.out.print(stack.pop());
}
stack.push(c);
}
} else if (c == '(') {
stack.push(c);
} else if (c == ')') {
char temp = ' ';
while ((temp = stack.pop()) != '(') {
System.out.print(temp);
}
} else {
System.out.print(c);
}
}
if (!stack.isEmpty()) {
while (!stack.isEmpty()) {
System.out.print(stack.pop());
}
}
}
public static void main(String[] args) {
TestStack testStack = new TestStack("A+B*(C-D)/E+F/H");
testStack.analysisString();
}
}
Java 栈实现中缀表达式转后缀表达式
最新推荐文章于 2024-09-15 09:47:04 发布