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

C++ में प्रीफिक्स एक्सप्रेशन का मूल्यांकन


इस लेख में, हम प्रीफिक्स एक्सप्रेशन के मूल्यांकन पर चर्चा करेंगे।

प्रीफिक्स एक्सप्रेशन क्या है?

इस नोटेशन में, ऑपरेटर ऑपरेंड्स से पहले लिखा जाता है, यानी ऑपरेटर ऑपरेंड्स से पहले आता है। उदाहरण के लिए, +ab। यह इसके इन्फिक्स नोटेशन a + b के बराबर है। प्रीफिक्स नोटेशन को पोलिश नोटेशन के नाम से भी जाना जाता है।

उदाहरण:

* + 6 9 - 3 1

प्रीफिक्स एक्सप्रेशन इन्फिक्स एक्सप्रेशन की तुलना में तेजी से मूल्यांकित होते हैं। साथ ही, प्रीफिक्स एक्सप्रेशन में कोई ब्रैकेट नहीं होते, जो इसे तेजी से मूल्यांकित करने में मदद करता है।

प्रीफिक्स एक्सप्रेशन के मूल्यांकन के लिए एल्गोरिदम:

प्रीफिक्स एक्सप्रेशन के मूल्यांकन के लिए स्टैक डेटा स्ट्रक्चर की आवश्यकता होती है। हम ऑपरेटर्स को स्टैक में पुश करेंगे और फिर एक्सप्रेशन को हल करेंगे।

हम एक्सप्रेशन के प्रत्येक एलिमेंट को एक-एक करके देखेंगे। यदि वर्तमान एलिमेंट एक ऑपरेंड है, तो हम इसे स्टैक में पुश करेंगे। और यदि यह एक ऑपरेटर है, तो हम दो ऑपरेंड्स पॉप करेंगे, ऑपरेशन करेंगे (ऑपरेंड ऑपरेटर ऑपरेंड) और फिर परिणाम को वापस स्टैक में पुश कर देंगे।

एल्गोरिदम चरण:

चरण 1: एक्सप्रेशन के अंतिम एलिमेंट से शुरू करें।

चरण 2: वर्तमान एलिमेंट की जांच करें।

चरण 2.1: यदि यह एक ऑपरेंड है, तो इसे स्टैक में पुश करें।
चरण 2.2: यदि यह एक ऑपरेटर है, तो स्टैक से दो ऑपरेंड्स पॉप करें। ऑपरेशन करें और परिणाम को वापस स्टैक में पुश करें।

चरण 3: इसे तब तक करें जब तक एक्सप्रेशन के सभी एलिमेंट्स पार न हो जाएं और स्टैक के टॉप को वापस करें जो ऑपरेशन का परिणाम होगा।

आइए हमारे एल्गोरिदम की कार्यप्रणाली देखते हैं एक प्रीफिक्स एक्सप्रेशन को हल करने के लिए:

प्रीफिक्स एक्सप्रेशन:

* + 6 9 - 3 1

इटरेशन 1:
स्कैन किया गया एलिमेंट = 1
ऑपरेशन = स्टैक में पुश करें
स्टैक = 1

इटरेशन 2:
स्कैन किया गया एलिमेंट = 3
ऑपरेशन = स्टैक में पुश करें
स्टैक = 3, 1

इटरेशन 3:
स्कैन किया गया एलिमेंट = -
ऑपरेशन = स्टैक से दो पॉप करें, ऑपरेशन करें और परिणाम वापस पुश करें।
3 - 1 = 2
स्टैक = 2

इटरेशन 4:
स्कैन किया गया एलिमेंट = 9
ऑपरेशन = स्टैक में पुश करें
स्टैक = 9, 2

इटरेशन 5:
स्कैन किया गया एलिमेंट = 6
ऑपरेशन = स्टैक में पुश करें
स्टैक = 6, 9, 2

इटरेशन 6:
स्कैन किया गया एलिमेंट = +
ऑपरेशन = स्टैक से दो पॉप करें, ऑपरेशन करें और परिणाम वापस पुश करें।
6 + 9 = 15
स्टैक = 15, 2

इटरेशन 7:
स्कैन किया गया एलिमेंट = *
ऑपरेशन = स्टैक से दो पॉप करें, ऑपरेशन करें और परिणाम वापस पुश करें।
15 * 2 = 30
स्टैक = 30

अंत = स्टैक के टॉप को वापस करें, परिणाम = 30।

हमारे समाधान की कार्यप्रणाली को दर्शाने वाला प्रोग्राम:

उदाहरण

#include <bits/stdc++.h> 
using namespace std; 

double evaluatePrefix(string prefixExp) { 
    stack<double> operandStack; 
    int size = prefixExp.size() - 1; 
    
    for (int i = size; i >= 0; i--) { 
        if (isdigit(prefixExp[i])) 
            operandStack.push(prefixExp[i] - '0'); 
        else { 
            double o1 = operandStack.top(); 
            operandStack.pop(); 
            double o2 = operandStack.top(); 
            operandStack.pop(); 
            
            if (prefixExp[i] == '+') 
                operandStack.push(o1 + o2); 
            else if (prefixExp[i] == '-') 
                operandStack.push(o1 - o2); 
            else if (prefixExp[i] == '*') 
                operandStack.push(o1 * o2); 
            else if (prefixExp[i] == '/') 
                operandStack.push(o1 / o2); 
            else { 
                cout << "Invalid Expression"; 
                return -1; 
            } 
        } 
    } 
    return operandStack.top(); 
} 

int main() { 
    string prefixExp = "*+69-31"; 
    cout << "The result of evaluation of expression " << prefixExp << " is " << evaluatePrefix(prefixExp); 
    return 0; 
}

आउटपुट:

The result of evaluation of expression *+69-31 is 30

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

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

  1. C++ STL में स्टैक (3.5) C++ STL में स्टैक (3.5)

    C++ STL में, स्टैक का उपयोग एक कंटेनर के रूप में किया जाता है जिसे LIFO संरचना के रूप में कार्यान्वित किया जाता है। LIFO का अर्थ है लास्ट इन फर्स्ट आउट। स्टैक को किताबों के ढेर के रूप में देखा जा सकता है जिसमें किताबें एक के ऊपर एक व्यवस्थित होती हैं और अंत में डाली गई किताब सबसे पहले हटाई जाएगी इसल

  1. - C++ प्रोग्राम: स्टैक इम्प्लीमेंट करना

    इस प्रोग्राम में हम देखेंगे कि C++ का उपयोग करके स्टैक कैसे इम्प्लीमेंट करें। एक स्टैक एक एब्सट्रैक्ट डेटा स्ट्रक्चर है जिसमें एलिमेंट्स का संग्रह होता है। स्टैक LIFO मैकेनिज्म इम्प्लीमेंट करता है यानी जो एलिमेंट अंत में पुश किया जाता है वह पहले पॉप होता है। स्टैक में कुछ प्रमुख ऑपरेशन हैं: Push