CC-9 : Convert Infix expression to Postfix expression.
Description:
Given an Infix expression, convert it to a Postfix expression.
Test cases and expected outputs:
| Input Parameters | Expected outputs |
|---|---|
| Infix: K+L-M*N+(O^P)*W/U/V*T+Q | PostFix: KL+MN*-OP^W*U/V/T*+Q+ |
| Infix: A-B-D*E/F+B*C | PostFix: AB-DE*F/-BC*+ |
Pseudocode:
getPrecedence() method
| Returns the mathematical precedence of operator characters. |
| Precedence of :
+ , - is 1.
* , / is 2.
^ is 3.
|
infixtoPostfix() method
| Initialize a stack for processing purposes. |
| Initialize a StringBuilder named postFix to hold the result of processing. |
| For each character in input infix string:
If current character is not an operator or a bracket append it to postFix.
If current character is a starting bracket, add it to the stack.
If current character is an ending bracket:
While current character is not a starting bracket:
Add current character to postFix.
Remove current character from stack.
Else:
Call getPrecedence() for current character.
While precedence of current character is less that precedence of character at top of stack:
Remove character from top of stack and add it to postFix.
Add current character to stack.
|
| While stack is not empty:
Remove top character fromstack and add it to postFix.
|
| Return postFix. |
Code:
public class StackInfixToPostfix {
private Deque<Character> stack=null;
private int getPrecedence(char c) {
int pre=0;
switch (c) {
case '+':
pre=1;
break;
case '-':
pre=1;
break;
case '*':
pre=2;
break;
case '/':
pre=2;
break;
case '^':
pre=3;
break;
default:
pre=-1;
break;
}
return pre;
}
public String infixToPostfix(String str) throws Exception{
stack=new LinkedList<Character>();
StringBuilder postFix=new StringBuilder();
char[] chr=str.toCharArray();
String operator="+-*/^"; String brackets="()";
char c, tempC; int prec, tempCPrec;
for (int idx=0;idx < chr.length; idx++) {
c=chr[idx];
if ((operator.indexOf(c)==-1)&&(brackets.indexOf(c)==-1)) {
postFix.append(c);
}else if (c=='(') {
stack.offerFirst(c);
}else if (c==')') {
while ((stack.size()!=0)&&(stack.peekFirst()!='(')) {
postFix.append(stack.pollFirst());
}
stack.pollFirst();
} else {
prec=getPrecedence(c);
while (stack.size()!=0) {
tempC=stack.peekFirst();
tempCPrec=getPrecedence(tempC);
if (prec <= tempCPrec) {
postFix.append(stack.pollFirst());
}else {
break;
}
}
stack.offerFirst(c);
}
}
while (stack.size()!=0) {
postFix.append(stack.pollFirst());
}
return postFix.toString();
}
}
Click here to download and run code and test cases !
| About Us | Privacy Policy | Contact us |