Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी++ में इंफिक्स के लिए पोस्टफिक्स


इस समस्या में हमें पोस्टफिक्स फॉर्म में एक्सप्रेशन दिया जाता है और हमारा काम एक्सप्रेशन के इंफिक्स फॉर्म को प्रिंट करना है।

इन्फिक्स एक्सप्रेशन एक अभिव्यक्ति है जिसमें ऑपरेटर ऑपरेंड के बीच में होता है, जैसे ऑपरेंड ऑपरेटर ऑपरेंड।

पोस्टफ़िक्स एक्सप्रेशन एक अभिव्यक्ति है जिसमें ऑपरेटर ऑपरेंड के बाद होता है, जैसे ऑपरेंड ऑपरेटर।

पोस्टफ़िक्स एक्सप्रेशन आसानी से सिस्टम द्वारा गणना किए जाते हैं लेकिन मानव पठनीय नहीं होते हैं। तो यह रूपांतरण आवश्यक है। आम तौर पर एंड-यूज़र द्वारा पढ़ना और संपादित करना इन्फिक्स नोटेशन पर किया जाता है क्योंकि वे कोष्ठक से अलग होते हैं इसलिए मनुष्यों के लिए आसानी से समझ में आता है।

आइए समस्या को समझने के लिए एक उदाहरण लेते हैं

इनपुट - xyz/*

>आउटपुट - (एक्स * (वाई/जेड))

इस समस्या को हल करने के लिए, हम स्टैक डेटा संरचना का उपयोग करेंगे। और एक-एक करके पोस्टफिक्स एक्सप्रेशन को पार करें और फिर निम्नलिखित केस की जांच करें -

केस 1 - अगर ऑपरेंड मिलता है, तो उसे स्टैक में पुश करें।

केस 2 - यदि कोई ऑपरेटर मिलता है, तो ऑपरेंड पर पॉप करें, तीनों का एक इंफिक्स एक्सप्रेशन बनाएं और एक्सप्रेशन को ऑपरेंड के रूप में पुश करें।

अंत में जब स्टैक में केवल एक तत्व बचा होता है और ट्रैवर्सिंग की जाती है, तो स्टैक के शीर्ष को पॉप करें, यह इंफिक्स रूपांतरण है।

उदाहरण

हमारे समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम।

#include <bits/stdc++.h>
using namespace std;
bool isOperand(char x) {
   return (x >= 'a' && x <= 'z') || (x >= 'A' && x <= 'Z');
}
string infixConversion(string postfix) {
   stack<string> infix;
   for (int i=0; postfix[i]!='\0'; i++) {
      if (isOperand(postfix[i])) {
         string op(1, postfix[i]);
         infix.push(op);
      } else {
         string op1 = infix.top();
         infix.pop();
         string op2 = infix.top();
         infix.pop();
         infix.push("{"+op2+postfix[i]+op1 +"}");
      }
   }
   return infix.top();
}
int main() {
   string postfix = "xyae+/%";
   cout<<"The infix conversion of the postfix expression '"<<postfix<<"' is : ";
   cout<<infixConversion(postfix);
   return 0;
}

आउटपुट

The infix conversion of the postfix expression 'xyae+/%' is : {x%{y/{a+e}}}

  1. सी ++ एक अभिव्यक्ति से अमान्य कोष्ठक निकालें

    एक कोष्ठक अनुक्रम को देखते हुए; अब, आपको उन सभी संभावित कोष्ठकों को प्रिंट करना होगा, जिन्हें वह अमान्य कोष्ठकों को हटाकर बना सकता है, उदाहरण के लिए Input : str = “()())()” - Output : ()()() (())() There are two possible solutions "()()()" and "(())()" Input : str =

  1. सी ++ में उदाहरण के साथ अभिव्यक्ति वृक्ष

    एक्सप्रेशन ट्री एक विशेष प्रकार का बाइनरी ट्री होता है जिसमें ट्री के प्रत्येक नोड में या तो एक ऑपरेटर या ऑपरेंड होता है। लीफ नोड्स पेड़ का एक संचालन . का प्रतिनिधित्व करता है . गैर-पत्ती नोड्स पेड़ का एक ऑपरेटर . का प्रतिनिधित्व करता है । उदाहरण: इंफिक्स एक्सप्रेशन प्राप्त करने के लिए जिस

  1. सी++ में एक्सप्रेशन ट्री का मूल्यांकन

    इस समस्या में, हमें एक एक्सप्रेशन ट्री दिया जाता है जिसमें बाइनरी ऑपरेशंस जैसे +, -, /, * होते हैं। हमें एक्सप्रेशन ट्री का मूल्यांकन करने और फिर परिणाम वापस करने की आवश्यकता है। अभिव्यक्ति वृक्ष एक विशेष प्रकार का बाइनरी ट्री है जिसमें प्रत्येक नोड में या तो एक ऑपरेटर या ऑपरेंड होता है जो इस प्रक