এই সমস্যায়, আমাদের পোস্টফিক্স ফর্মে এক্সপ্রেশন দেওয়া হয় এবং আমাদের কাজ হল এক্সপ্রেশনের ইনফিক্স ফর্ম প্রিন্ট করা৷
ইনফিক্স এক্সপ্রেশন একটি অভিব্যক্তি যেখানে অপারেটর অপারেন্ডের মাঝখানে থাকে, যেমন অপারেন্ড অপারেটর অপারেন্ড।
পোস্টফিক্স এক্সপ্রেশন একটি অভিব্যক্তি যেখানে অপারেটর অপারেন্ডের পরে থাকে, যেমন অপারেন্ড অপারেটর৷
পোস্টফিক্স এক্সপ্রেশন সিস্টেম দ্বারা সহজে গণনা করা হয় কিন্তু মানুষের পাঠযোগ্য নয়। তাই এই রূপান্তর প্রয়োজন. সাধারণত শেষ-ব্যবহারকারীর দ্বারা পড়া এবং সম্পাদনা করা হয় ইনফিক্স নোটেশনে কারণ সেগুলি বন্ধনী আলাদা করা হয় তাই মানুষের পক্ষে সহজেই বোধগম্য৷
সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক
ইনপুট৷ − xyz/*
আউটপুট − (x * (y/z))
এই সমস্যা সমাধানের জন্য, আমরা স্ট্যাক ডেটা স্ট্রাকচার ব্যবহার করব। এবং পোস্টফিক্স এক্সপ্রেশনটি এক এক করে অতিক্রম করুন এবং তারপরে নিম্নলিখিত ক্ষেত্রে −
পরীক্ষা করুনকেস 1 − যদি অপারেন্ডটি পাওয়া যায় তবে এটিকে স্ট্যাকের মধ্যে ঠেলে দিন।
কেস 2 − যদি একটি অপারেটর পাওয়া যায়, অপারেন্ডে পপ করুন, তিনটির একটি ইনফিক্স এক্সপ্রেশন তৈরি করুন এবং এক্সপ্রেশনটিকে একটি অপারেন্ড হিসাবে পুশ করুন৷
শেষ পর্যন্ত যখন স্ট্যাকের শুধুমাত্র একটি উপাদান অবশিষ্ট থাকে এবং ট্র্যাভার্সিং সম্পন্ন হয়, তখন স্ট্যাকের শীর্ষে পপ করুন, এটি ইনফিক্স রূপান্তর।
উদাহরণ
আমাদের সমাধানের বাস্তবায়ন দেখানোর জন্য প্রোগ্রাম।
#include <bits/stdc++.h> using namespace std; bool isOperand(char x) { return (x >= 'a' && x <= 'z') || (x >= 'A' && x <= 'Z'); } string infixConversion(string postfix) { stack<string> infix; for (int i=0; postfix[i]!='\0'; i++) { if (isOperand(postfix[i])) { string op(1, postfix[i]); infix.push(op); } else { string op1 = infix.top(); infix.pop(); string op2 = infix.top(); infix.pop(); infix.push("{"+op2+postfix[i]+op1 +"}"); } } return infix.top(); } int main() { string postfix = "xyae+/%"; cout<<"The infix conversion of the postfix expression '"<<postfix<<"' is : "; cout<<infixConversion(postfix); return 0; }
আউটপুট
The infix conversion of the postfix expression 'xyae+/%' is : {x%{y/{a+e}}}