Infix to postfix Java code and explanation

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

 

 

By Maniruzzaman Akash

Maniruzzaman Akash is a freelance web developer with most popular Laravel PHP frameork and Vue JS

Leave a Reply

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