- Notifications
You must be signed in to change notification settings - Fork 366
/
Copy pathInfixToPrefix.java
42 lines (41 loc) · 1.89 KB
/
InfixToPrefix.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//Java Program to convert Infix Expression to Prefix
importjava.util.Stack;
publicclassInfixToPrefix {
publicstaticvoidmain(String[] args) {
System.out.println("1+2+3 -> " + infix2Prefix("1+2+3"));
System.out.println("A^B-(C+D) -> " + infix2Prefix("A^B-(C+D)"));
System.out.println("(P/L+(F*J) -> " + infix2Prefix("(P/L+(F*J)"));
}
publicstaticStringinfix2Prefix(Stringexpression){
if(!BalancedBrackets.isBalanced(expression)) return"Invalid Expression";
Stack<Character> operatorStack = newStack<>();
StringBuilderprefixExpression = newStringBuilder();
intn = expression.length();
for(inti = n - 1 ; i >= 0 ; i--){
charscanned = expression.charAt(i);
if(Character.isLetterOrDigit(scanned)) prefixExpression.append(scanned);
elseif(scanned == ')') operatorStack.push(scanned);
elseif(scanned == '('){
while(!operatorStack.isEmpty() && operatorStack.peek() != ')'){
prefixExpression.append(operatorStack.pop());
}
if(!operatorStack.isEmpty()) operatorStack.pop();
}
elseif(operatorStack.isEmpty() || operatorStack.peek() == ')') operatorStack.push(scanned);
else{
while(!operatorStack.isEmpty() && precedence(operatorStack.peek()) < precedence(scanned)){
prefixExpression.append(operatorStack.pop());
}
operatorStack.push(scanned);
}
}
while(!operatorStack.isEmpty()) prefixExpression.append(operatorStack.pop());
returnprefixExpression.reverse().toString();
}
staticintprecedence(charoperator){
if(operator == '^') return3;
if(operator == '*' || operator == '/') return2;
if(operator == '+' || operator == '-') return1;
return0;
}
}