রিভার্স পোলিশ নোটেশন (পোস্টফিক্স এক্সপ্রেশন) ইভ্যালুয়েট করতে হবে। স্ট্যাক ডেটা স্ট্রাকচার ব্যবহার করা হয়। অপারেন্ড পেলে স্টকে পুশ, অপারেটর পেলে দুইটি পপ করে অপারেশন করিয়ে রেজাল্ট পুশ। শেষে স্ট্যাক টপে ফাইনাল রেজাল্ট থাকে।
উদাহরণ: "53+62/*35*+" -> ৩৯।
সমাধান: প্রতিটি ক্যারেক্টার চেক করলে অপারেটর হলে দুটি পপ করে অপারেশন, অপারেন্ড হলে পুশ। শেষে স্ট্যাক টপ রিটার্ন।
উদাহরণ (C++)
#include<iostream>
#include<cmath>
#include<stack>
#include<climits>
using namespace std;
float scanNum(char ch){
int 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);
else return INT_MIN;
}
float postfixEval(string postfix){
int a, b;
stack<float> 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);
}
ইনপুট
"53+62/*35*+"
আউটপুট
The result is: 39