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

सी ++ में स्टैक अनुक्रमों को मान्य करें

मान लीजिए कि हमारे पास अलग-अलग मूल्यों के साथ दो अनुक्रमों को धक्का दिया गया है और पॉप किया गया है, तो हमें सही और केवल तभी खोजना होगा जब यह प्रारंभिक रूप से खाली स्टैक पर पुश और पॉप संचालन के अनुक्रम का परिणाम हो सकता है। तो अगर इनपुट पुश =[1,2,3,4,5], और पॉप =[4,5,3,2,1] है, तो आउटपुट सही होगा। हम पुश(1), पुश(2), पुश(3), पुश(4), पॉप() :4, पुश(5), पॉप() :5, पॉप() :3, पॉप() का उपयोग कर सकते हैं:2, पॉप() :1

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • हल () नामक एक विधि बनाएं। यह पुश और पॉप्ड ऐरे लेगा

  • स्टैक सेंट को परिभाषित करें, इंडेक्स सेट करें:=0

  • मेरे लिए 0 से लेकर पुश ऐरे के आकार तक

    • पुश पुश[i] सेंट में

    • अगर पॉप किया गया [इंडेक्स] =स्टैक टॉप एलिमेंट, तो

      • अनुक्रमणिका :=अनुक्रमणिका + 1

      • स्टैक से पॉप करें

      • जबकि सेंट खाली नहीं है, और पॉप [इंडेक्स] =सेंट के ऊपर

        • अनुक्रमणिका :=अनुक्रमणिका + 1

      • सेंट से हटाएं

  • जबकि इंडेक्स <पॉप का आकार

    • अगर पॉप किया गया [इंडेक्स] =स्टैक टॉप, तो

      • इंडेक्स को 1 से बढ़ाएं

      • स्टैक से हटाएं

    • अन्यथा लूप से बाहर आएं

  • स्टैक खाली होने पर सही लौटें

  • इस समाधान विधि को नीचे दिए गए जैसे मुख्य भाग से बुलाया जाएगा -

  • वापसी हल (धक्का दिया, पॉप किया गया)

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   bool solve(vector<int>& pushed, vector<int>& popped){
      stack <int> st;
      int currentIndexOfPopped = 0;
      for(int i =0;i<pushed.size();i++){
         st.push(pushed[i]);
         if(popped[currentIndexOfPopped] == st.top()){
            currentIndexOfPopped++;
            st.pop();
            while(!st.empty() && popped[currentIndexOfPopped]==st.top()){
               currentIndexOfPopped++;
               st.pop();
            }
         }
      }
      while(currentIndexOfPopped <popped.size()){
         if (popped[currentIndexOfPopped]==st.top()){
            currentIndexOfPopped++;
            st.pop();
         }else{
            break;
         }
      }
      return st.empty();
   }
   bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
      Solution s;
      bool flag = s.solve(pushed, popped);
      return flag;
   }
};
main(){
   vector<int> v = {1,2,3,4,5};
   vector<int> v1 = {4,5,3,2,1};
   Solution ob;
   cout << (ob.validateStackSequences(v, v1));
}

इनपुट

[1,2,3,4,5]
[4,5,3,2,1]

आउटपुट

1

  1. सी ++ एसटीएल में ढेर (3.5)

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

  1. सी ++ में बाइनरी ट्री नोड्स को मान्य करें

    मान लीजिए कि हमारे पास n बाइनरी ट्री नोड्स हैं जिनकी संख्या 0 से n-1 तक है, जहां नोड I के दो बच्चे हैं। सभी दिए गए नोड्स बिल्कुल एक वैध बाइनरी ट्री बनाते हैं। जब नोड मेरे पास कोई बायां बच्चा नहीं है तो बाएं बच्चे [i] बराबर -1 होगा, इसी तरह दाएं बच्चे के लिए। हमें यह ध्यान रखना होगा कि नोड्स का कोई म

  1. सी ++ प्रोग्राम सरणी का उपयोग करके स्टैक को लागू करने के लिए

    स्टैक एक सार डेटा संरचना है जिसमें तत्वों का संग्रह होता है। स्टैक LIFO तंत्र को लागू करता है यानी अंत में धकेले जाने वाले तत्व को पहले पॉप आउट किया जाता है। स्टैक में कुछ सिद्धांत संचालन हैं - पुश - यह स्टैक के शीर्ष पर डेटा मान जोड़ता है। पॉप - यह स्टैक के शीर्ष पर डेटा मान को हटा देता है