এই সমস্যায় একটি পোস্টফিক্স এক্সপ্রেশন দেওয়া আছে, যা ইনফিক্স রূপে রূপান্তর করতে হবে।
সংজ্ঞা
- ইনফিক্স এক্সপ্রেশন: অপারেটর দুই অপারেন্ডের মাঝপথে থাকে, যেমন
operand operator operand। - পোস্টফিক্স এক্সপ্রেশন: অপারেটর অপারেন্ডের পরে থাকে, যেমন
operand operand operator।
পোস্টফিক্স এক্সপ্রেশন কম্পিউটারের জন্য সহজ কিন্তু মানুষের জন্য কঠিন। তাই ইনফিক্সে রূপান্তর দরকার হয়।
উদাহরণ
ইনপুট: xyz/*
আউটপুট: (x * (y/z))
অ্যালগরিদম (স্ট্যাক ব্যবহার করে)
- পোস্টফিক্স এক্সপ্রেশন ট্রাভার্স করুন।
- কেস ১: অপারেন্ড পেলে স্টাকে পুশ করুন।
- কেস ২: অপারেটর পেলে স্ট্যাক থেকে দুটি অপারেন্ড পপ করুন, ইনফিক্স এক্সপ্রেশন তৈরি করে আবার পুশ করুন।
- শেষে স্ট্যাকের একমাত্র উপাদানটি হবে ইনফিক্স রূপ।
C++ প্রোগ্রাম
#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 << "পোস্টফিক্স এক্সপ্রেশন '" << postfix << "' এর ইনফিক্স রূপ: ";
cout << infixConversion(postfix);
return 0;
}
আউটপুট
পোস্টফিক্স এক্সপ্রেশন 'xyae+/%' এর ইনফিক্স রূপ: {x%{y/{a+e}}}