इस समस्या में, हमें एक प्रीफिक्स एक्सप्रेशन दिया गया है। हमारा कार्य दिए गए एक्सप्रेशन का इन्फिक्स रूपांतरण प्रिंट करना है।
प्रीफिक्स एक्सप्रेशन वे एक्सप्रेशन हैं जिनमें ऑपरेटर ऑपरेंड्स से पहले होते हैं।
उदाहरण: +AB.
इन्फिक्स एक्सप्रेशन वे एक्सप्रेशन हैं जिनमें ऑपरेटर ऑपरेंड्स के बीच होते हैं।
उदाहरण: A+B
इन्फिक्स एक्सप्रेशन मानव समझ के लिए जानकारी हैं, लेकिन कंप्यूटर प्रीफिक्स या पोस्टफिक्स एक्सप्रेशन (आमतौर पर पोस्टफिक्स) पर गणना करता है।
समस्या को समझने के लिए एक उदाहरण लेते हैं
Input: prefix : /+LM/NX Output: infix : (L+M) / (N/X)
इस समस्या को हल करने के लिए, हम स्टैक डेटा संरचना का उपयोग करेंगे। हम एक्सप्रेशन के रिवर्स ऑर्डर में प्रीफिक्स एक्सप्रेशन को पार करेंगे। और एक्सप्रेशन के प्रत्येक एलिमेंट के लिए इन मामलों की जांच करेंगे।
यदि एलिमेंट ऑपरेंड है -> push(element) स्टैक में।
यदि एलिमेंट ऑपरेटर है -> 2Xpop(topofstack) और क्रम में पुश करें स्ट्रिंग के रूप में = ऑपरेंड - ऑपरेटर - ऑपरेंड।
अंत में, पार करने के बाद, स्टैक के टॉप में एक स्ट्रिंग होगी जो इन्फिक्स रूपांतरण है, इसे प्रिंट करें।
हमारे समाधान के कार्यान्वयन को दिखाने वाला प्रोग्राम
उदाहरण
#include <iostream> #include <stack> using namespace std; bool isOperator(char element) { switch (element) { case '+': case '-': case '/': case '*': return true; } return false; } string convertToInfix(string prefix) { stack<string> expression; int length = prefix.size(); for (int i = length - 1; i >= 0; i--) { if (isOperator(prefix[i])) { string op1 = expression.top(); expression.pop(); string op2 = expression.top(); expression.pop(); string temp = "{"+op1+prefix[i]+op2+"}"; expression.push(temp); } else { expression.push(string(1, prefix[i])); } } return expression.top(); } int main() { string prefix = "*-AB/+CD*XY"; cout<<"Prefix expression : "<<prefix<<endl; cout<<"Infix expression : " <<convertToInfix(prefix); return 0; }आउटपुट
Prefix expression : *-AB/+CD*XY Infix expression : {{A-B}*{{C+D}/{X*Y}}}