আজ আমরা Infix to postfix দেখব জাভা প্রোগ্রামিং ল্যাঙ্গুয়েজে। সাথে কিভাবে এটা করা হয়েছে সেগুলো দেখব।
Infix to Postfix করার নিয়মঃ
- যদি কারেক্টর অপারেন্ড (operand) হয়, যেমনঃ A, B, C, … Z ইত্যাদি তবে, কারেক্টার টাকে Postfix String এ এড করব।
- যদি কারেক্টর অপারেটর (Operator) হয়, তাহলে দুইটা কন্ডিশন
- যদি Stack Empty থাকে, তবে Stack এ Push করে দিব
- যদি Stack Empty না থাকে, তবে Stack এর অন্য অপারেটর গুলোর মধ্যে Precedence Check করবে। যেটার Higher Precedence থাকবে, সেটাকে Postfix String এ add করে দিব এবং Stack Operator থেকে pop করব।
- যদি Expression শেষ হয়ে যায়, তাহলে Stack operator থেকে pop করে Postfix String এ যুক্ত করে দিব।
Infix to Postfix Stack এলগরিদম ব্যবহার করে করা হয়েছে।
নিচের উদাহরণটি দেখিঃ
|
Current symbol |
Operator stack |
Postfix string |
1 |
A |
|
A |
2 |
* |
* |
A |
3 |
B |
* |
A B |
4 |
+ |
+ |
A B * {pop and print the ‘*’ before pushing the ‘+’} |
5 |
C |
+ |
A B * C |
6 |
|
|
A B * C + |
জাভা সোর্স কোডঃ
import java.util.Stack; import java.util.Scanner; public class InfixToPostfix { static int getPrecedence(char checkChar) { if(checkChar=='+'||checkChar=='-') return 1; if(checkChar=='*'||checkChar=='/') return 2; if(checkChar=='('||checkChar==')') return 0; return -1; } public static void main(String[] args) { Stack<Character> stack=new Stack(); Scanner scanner =new Scanner(System.in); String result=""; String inputStr=scanner.nextLine(); char[] inputCharArray=inputStr.toCharArray(); for(char chrac:inputCharArray) System.out.println(chrac); for(int i=0;i<inputCharArray.length;i++) { char checkChar=inputCharArray[i]; if(checkChar!='+'&&checkChar!='-'&&checkChar!='/'&&checkChar!='*'&&checkChar!='('&&checkChar!=')') { result=result+checkChar; } else { if(checkChar!='('&&checkChar!=')') { if(stack.isEmpty()) { stack.push(checkChar); } else { while(getPrecedence(stack.peek())>=getPrecedence(checkChar)) { result=result+stack.pop(); if(stack.isEmpty()) break; } stack.push(checkChar); } } else { if(checkChar=='(') stack.push(checkChar); else { while(stack.peek()!='(') { result=result+stack.pop(); } stack.pop(); } } } } while(!stack.isEmpty()) result=result+stack.pop(); System.out.println(result); } }