Infix to postfix Java code and explanation

Infix to postfix Java কোড এবং এক্সপ্লানেশন

Java Programming Programming

আজ আমরা 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);
}
}

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *