इस समस्या में हमें एक उपसर्ग व्यंजक दिया जाता है। हमारा काम दिए गए एक्सप्रेशन के पोस्टफिक्स रूपांतरण को प्रिंट करना है।
उपसर्ग एक्सप्रेशन वे एक्सप्रेशन हैं जिनमें ऑपरेंड से पहले ऑपरेटर होते हैं।
उदाहरण:+AB.
पोस्टफिक्स एक्सप्रेशन वे एक्सप्रेशन हैं जिनके एक्सप्रेशन में ऑपरेंड के बाद ऑपरेटर होते हैं।
उदाहरण:एबी/
उपसर्ग को पोस्टफिक्स में बदलने से इंफिक्स में रूपांतरण शामिल नहीं होना चाहिए।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
Input: /+XY+NM Output: XY+NM+/ Explanation: infix -> (X+Y)/(N+M)
इस समस्या को हल करने के लिए, हम पहले पूरे पोस्टफिक्स एक्सप्रेशन को उल्टे क्रम में पार करेंगे। और हम अपने प्रसंस्करण के लिए स्टैक डेटा संरचना का उपयोग करेंगे। और ट्रैवर्सल में पाए गए तत्वों के मामलों के लिए निम्न कार्य करें
केस:अगर सिंबल ऑपरेंड है -> पुश (एलिमेंट) स्टैक में।
केस:यदि प्रतीक ऑपरेटर है -> 2*पॉप(तत्व) स्टैक से। और फिर ऑपरेंड - ऑपरेंड - ऑपरेटर का पुश अनुक्रम।
हमारे एल्गोरिथ्म के कार्यान्वयन को दिखाने के लिए कार्यक्रम
उदाहरण
#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*/*