Ticker

6/recent/ticker-posts

Header Ads Widget

Responsive Advertisement

Infix to Postfix using stack



 Solution {
  public:
    /**
    ismai ham pahle ek stack ch and ek empty string ans banaye hai. uske baad phir string ko starting se
    length tak traverse karainge jab character a-z ya 0-9 hoga to ham use ans string mai insert kr dainge
    or agar '(' aayega to usko stack ch mai puch kr dainge or agar ')' aayega to ham jab tak '(' na aajaye 
    stack ke sare element ko ans mai add krainge . or last mai '(' ko bhi stack se remove kr dainge
     jab operator aayega tab tab tak st.top() mai jo hai agar vo naye operator se km precedence rakhta hai
     tab stack mai push kra dainge . or agar naye operator ka precedence st.top ke precedence km ya barabar
     hoga tab ham stack ke operator ko ans mai add krainge or naye operator ko stack mai push krainge
    ****/
    int prec(char c)
    {
        if(c=='^'){
            return 3;
        }
        else if(c=='/' ||c=='*')
        {
            return 2;
        }
        else if(c=='+' || c=='-')
        {
            return 1;
        }
        else return -1;
    }
    string infixToPostfix(string s) {
        stackch;
        string ans;
        for(int i=0;i='a'&&s[i]<='z' || s[i]>='A'&&s[i]<='Z' || s[i]>='0' && s[i]<='9')
            {
                ans+=s[i];
            }
            else if(s[i]=='(')
            {
                ch.push(s[i]);
            }
            else if(s[i]==')')
            {
                while(!ch.empty() && ch.top()!='(') // jab tak '(' na aa jaye  stack ke operator ko ans mai
                                                    // add kiye or stack se operator delete kiye
                {
                    ans+=ch.top();
                    ch.pop();
                }
                    ch.pop(); // ab last mai '(' bhi delete kiye
                
            }
            else
            {
                while(!ch.empty() && prec(ch.top())>=prec(s[i])) // jab tak stack empty na ho or stack ke top
    // ka precedence naye operator ke precedence se jada na ho operator stack se ans mai add kiya
                {
                    ans+=ch.top();
                    ch.pop();
                }
                ch.push(s[i]); // naye operator ko stack mai push kiya
                
            }
        }
        while(!ch.empty())
        {
            ans+=ch.top();
            ch.pop();
        }
        return ans;
    }
};
infix se prefix ke liye sb kuchh same rahega bus starting mai ham string ko reverse kr daige or open braket ko close , and close braket ko open mai change kr dainge or phir same upper vala concepty laga dainge

Post a Comment

0 Comments