इस समस्या में, हमें एक प्रीफिक्स एक्सप्रेशन दिया गया है। हमारा कार्य दिए गए एक्सप्रेशन का पोस्टफिक्स रूपांतरण प्रिंट करना है।
प्रीफिक्स एक्सप्रेशन वे एक्सप्रेशन हैं जिनमें ऑपरेटर ऑपरेंड्स से पहले होते हैं।
उदाहरण: +AB.
पोस्टफिक्स एक्सप्रेशन वे एक्सप्रेशन हैं जिनमें ऑपरेटर एक्सप्रेशन में ऑपरेंड्स के बाद होते हैं।
उदाहरण: AB/
प्रीफिक्स से पोस्टफिक्स रूपांतरण में इन्फिक्स में रूपांतरण शामिल नहीं होना चाहिए।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
Input: /+XY+NM Output: XY+NM+/ Explanation: infix -> (X+Y)/(N+M)
इस समस्या को हल करने के लिए, हम पहले पूरे पोस्टफिक्स एक्सप्रेशन को रिवर्स ऑर्डर में पार करेंगे। और हम अपने प्रोसेसिंग के लिए स्टैक डेटा संरचना का उपयोग करेंगे। और पार करने पर मिले एलिमेंट्स के मामलों के लिए निम्नलिखित करें
केस: यदि सिंबल ऑपरेंड है -> push(element) स्टैक में।
केस: यदि सिंबल ऑपरेटर है -> 2*pop(element) स्टैक से। और फिर ऑपरेंड - ऑपरेंड - ऑपरेटर के क्रम में पुश करें।
हमारे एल्गोरिदम के कार्यान्वयन को दिखाने वाला प्रोग्राम
उदाहरण
#include <iostream> #include <stack> using namespace std; bool isOperator(char x) { switch (x) { case '+': case '-': case '/': case '*': return true; } return false; } string convertToPostfix(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 + op2 + prefix[i]; 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<<"Postfix expression : "<<convertToPostfix(prefix); return 0; }आउटपुट
Prefix expression : *-AB/+CD*XY Postfix expression : AB-CD+XY*/*