Skip to content

Commit

Permalink
infix to postfix
Browse files Browse the repository at this point in the history
  • Loading branch information
realDuYuanChao committed Oct 27, 2020
1 parent 2e6c7b4 commit 6faa2e3
Showing 1 changed file with 55 additions and 0 deletions.
55 changes: 55 additions & 0 deletions DataStructures/Stacks/InfixToPostfix.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
}

0 comments on commit 6faa2e3

Please sign in to comment.