mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-07-24 13:10:13 +08:00
infix to postfix
This commit is contained in:
55
DataStructures/Stacks/InfixToPostfix.java
Normal file
55
DataStructures/Stacks/InfixToPostfix.java
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
package DataStructures.Stacks;
|
||||||
|
|
||||||
|
import java.util.Stack;
|
||||||
|
|
||||||
|
public class InfixToPostfix {
|
||||||
|
public static void main(String[] args) throws Exception {
|
||||||
|
assert "32+".equals(infix2PostFix("3+2"));
|
||||||
|
assert "123++".equals(infix2PostFix("1+(2+3)"));
|
||||||
|
assert "34+5*6-".equals(infix2PostFix("(3+4)*5-6"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String infix2PostFix(String infixExpression) throws Exception {
|
||||||
|
if (!BalancedBrackets.isBalanced(infixExpression)) {
|
||||||
|
throw new Exception("invalid expression");
|
||||||
|
}
|
||||||
|
StringBuilder output = new StringBuilder();
|
||||||
|
Stack<Character> stack = new Stack<>();
|
||||||
|
for (char element : infixExpression.toCharArray()) {
|
||||||
|
if (Character.isLetterOrDigit(element)) {
|
||||||
|
output.append(element);
|
||||||
|
} else if (element == '(') {
|
||||||
|
stack.push(element);
|
||||||
|
} else if (element == ')') {
|
||||||
|
while (!stack.isEmpty() && stack.peek() != '(') {
|
||||||
|
output.append(stack.pop());
|
||||||
|
}
|
||||||
|
stack.pop();
|
||||||
|
} else {
|
||||||
|
while (!stack.isEmpty() && precedence(element) <= precedence(stack.peek())) {
|
||||||
|
output.append(stack.pop());
|
||||||
|
}
|
||||||
|
stack.push(element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (!stack.isEmpty()) {
|
||||||
|
output.append(stack.pop());
|
||||||
|
}
|
||||||
|
return output.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int precedence(char operator) {
|
||||||
|
switch (operator) {
|
||||||
|
case '+':
|
||||||
|
case '-':
|
||||||
|
return 0;
|
||||||
|
case '*':
|
||||||
|
case '/':
|
||||||
|
return 1;
|
||||||
|
case '^':
|
||||||
|
return 2;
|
||||||
|
default:
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user