गणितीय एक्सप्रेशन को हल करने के लिए, हमें प्रीफिक्स या पोस्टफिक्स फॉर्म की आवश्यकता होती है। इनफिक्स को पोस्टफिक्स में बदलने के बाद, सही उत्तर खोजने के लिए पोस्टफिक्स मूल्यांकन एल्गोरिदम की आवश्यकता होती है।
यहां भी हमें पोस्टफिक्स एक्सप्रेशन को हल करने के लिए स्टैक डेटा स्ट्रक्चर का उपयोग करना पड़ता है।
पोस्टफिक्स एक्सप्रेशन से, जब कुछ ऑपरेंड्स मिलते हैं, तो उन्हें स्टैक में पुश किया जाता है। जब कोई ऑपरेटर मिलता है, तो स्टैक से दो आइटम्स पॉप किए जाते हैं और फिर सही क्रम में ऑपरेशन किया जाता है। उसके बाद परिणाम को भविष्य के उपयोग के लिए स्टैक में पुश किया जाता है। पूरे एक्सप्रेशन को पूरा करने के बाद, अंतिम परिणाम भी स्टैक टॉप में स्टोर होता है।
इनपुट: पोस्टफिक्स एक्सप्रेशन: 53+62/*35*+ आउटपुट: परिणाम है: 39
एल्गोरिदम
postfixEvaluation(postfix)
इनपुट: मूल्यांकन के लिए पोस्टफिक्स एक्सप्रेशन।
आउटपुट: पोस्टफिक्स फॉर्म का मूल्यांकन करने के बाद उत्तर।
Begin
पोस्टफिक्स एक्सप्रेशन में प्रत्येक कैरेक्टर ch के लिए, करें
यदि ch एक ऑपरेटर है, तो
a := स्टैक से पहला एलिमेंट पॉप करें
b := स्टैक से दूसरा एलिमेंट पॉप करें
res := b (ऑपरेटर) a
res को स्टैक में पुश करें
अन्यथा यदि ch एक ऑपरेंड है, तो ch को स्टैक में जोड़ें
किया
स्टैक टॉप का एलिमेंट लौटाएं
End
उदाहरण कोड
#include <iostream>
#include <cmath>
#include <stack>
using namespace std;
float scanNum(char ch) {
int value;
value = ch;
return float(value - '0'); // कैरेक्टर से फ्लोट लौटाएं
}
int isOperator(char ch) {
if (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '^')
return 1; // कैरेक्टर एक ऑपरेटर है
return -1; // ऑपरेटर नहीं है
}
int isOperand(char ch) {
if (ch >= '0' && ch <= '9')
return 1; // कैरेक्टर एक ऑपरेंड है
return -1; // ऑपरेंड नहीं है
}
float operation(int a, int b, char op) {
// ऑपरेशन करें
if (op == '+')
return b + a;
else if (op == '-')
return b - a;
else if (op == '*')
return b * a;
else if (op == '/')
return b / a;
else if (op == '^')
return pow(b, a); // b^a ढूंढें
else
return INT_MIN; // नेगेटिव इन्फिनिटी लौटाएं
}
float postfixEval(string postfix) {
int a, b;
stack stk;
string::iterator it;
for (it = postfix.begin(); it != postfix.end(); it++) {
// एलिमेंट्स पढ़ें और पोस्टफिक्स मूल्यांकन करें
if (isOperator(*it) != -1) {
a = stk.top();
stk.pop();
b = stk.top();
stk.pop();
stk.push(operation(a, b, *it));
} else if (isOperand(*it) > 0) {
stk.push(scanNum(*it));
}
}
return stk.top();
}
main() {
string post = "53+62/*35*+";
cout << "The result is: " << postfixEval(post);
}
आउटपुट
The result is: 39