इस समस्या में हमें एक उपसर्ग व्यंजक दिया जाता है। हमारा काम दिए गए एक्सप्रेशन के इंफिक्स रूपांतरण को प्रिंट करना है।
उपसर्ग व्यंजक वे व्यंजक हैं जिनमें संकार्य से पहले संचालिका होती है।
उदाहरण:+AB.
इंफिक्स एक्सप्रेशन वे एक्सप्रेशन हैं जिनमें ऑपरेंड के बीच ऑपरेटर होते हैं।
उदाहरण:ए+बी
इन्फ़िक्स एक्सप्रेशन मानव समझ के लिए जानकारी हैं, लेकिन कंप्यूटर प्रीफ़िक्स या पोस्टफ़िक्स एक्सप्रेशन (आमतौर पर पोस्टफ़िक्स) पर गणना करता है।
आइए समस्या को समझने के लिए एक उदाहरण लेते हैं
Input: prefix : /+LM/NX Output: infix : (L+M) / (N/X)
इस समस्या को हल करने के लिए, हम स्टैक डेटा संरचना का उपयोग करेंगे। हम उपसर्ग व्यंजक को व्यंजक के विपरीत क्रम में पार करेंगे। और व्यंजक के प्रत्येक तत्व के लिए इन मामलों की जाँच करें।
यदि एलिमेंट ऑपरेंड है -> पुश (एलिमेंट) स्टैक में।
यदि तत्व ऑपरेटर है -> 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}}}