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

जांचें कि कोई सरणी सी ++ में क्रमबद्ध ढेर है या नहीं

मान लीजिए कि हमारे पास 1 से n तक अद्वितीय तत्वों की एक सरणी संख्या है। हमें यह जांचना होगा कि यह स्टैक-सॉर्टेबल है या नहीं। एक सरणी स्टैक सॉर्ट करने योग्य होती है जब इसे अस्थायी स्टैक का उपयोग करके किसी अन्य सरणी में संग्रहीत किया जा सकता है।

इसे हल करने के लिए, हम सरणी पर इनमें से किसी भी ऑपरेशन का उपयोग कर सकते हैं -

  • ऐरे के शुरुआती एलिमेंट को डिलीट करें और उस आइटम को स्टैक में पुश करें।

  • स्टैक के शीर्ष तत्व को हटाएं और इसे दूसरी सरणी के अंत में डालें।

अब यदि दिए गए सरणी के सभी तत्वों को इन परिचालनों द्वारा दूसरी सरणी में स्थानांतरित किया जाता है, तो दूसरी सरणी को गैर-घटते क्रम में क्रमबद्ध किया जाता है, तो दिया गया सरणी स्टैक सॉर्ट करने योग्य होता है।

इसलिए, यदि इनपुट संख्या =[8, 6, 5, 3, 1] की तरह है, तो आउटपुट सही होगा क्योंकि हम दो बार दक्षिणावर्त दिशा में घुमा सकते हैं तो इसे [1, 3, 4, 5, 6, 8]

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

  • एक स्टैक stk परिभाषित करें
  • अंतिम:=0
  • इनिशियलाइज़ i :=0 के लिए, जब i करें
  • यदि stk खाली नहीं है, तो −
    • शीर्ष:=stk का शीर्ष तत्व
    • जबकि शीर्ष (अंतिम + 1) के समान है, −
        . करें
      • अंतिम:=अंतिम + 1
      • stk से पॉप
      • यदि stk खाली है, तो:
        • लूप से बाहर आएं
      • शीर्ष:=stk का शीर्ष तत्व
    • यदि stk खाली है, तो:
      • v[i] को stk में पुश करें
    • अन्यथा
      • शीर्ष:=stk का शीर्ष तत्व
      • अगर वी[i] <शीर्ष, तो:
        • v[i] को stk में पुश करें
      • अन्यथा
        • झूठी वापसी
  • अन्यथा
    • v[i] को stk में पुश करें
  • सही लौटें
  • आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

    उदाहरण

    #include <bits/stdc++.h>
    using namespace std;
    bool solve(vector<int> &v) {
       stack<int> stk;
       int last = 0;
       for (int i = 0; i < v.size(); i++) {
          if (!stk.empty()){
             int top = stk.top();
             while (top == last + 1) {
                last = last + 1;
                stk.pop();
                if (stk.empty()){
                   break;
                } top = stk.top();
             }
             if (stk.empty()) {
                stk.push(v[i]);
             }else{
                top = stk.top();
                if (v[i] < top){
                   stk.push(v[i]);
                }else{
                   return false;
                }
             }
          }else{
             stk.push(v[i]);
          }
       } return true;
    }
    main(){
       vector<int>
       v = {8, 6, 5, 3, 1};
       cout << solve(v);
    }

    इनपुट

    {8, 6, 5, 3, 1}

    आउटपुट

    1

    1. C++ में किसी सरणी की बिटनोसिटी की जांच करने का कार्यक्रम

      एन पूर्णांकों की एक सरणी गिरफ्तारी [एन] को देखते हुए, कार्य यह जांचना है कि दिया गया सरणी बिटोनिक है या नहीं। यदि दी गई सरणी बिटोनिक है तो हां यह एक बिटोनिक सरणी है प्रिंट करें, अन्यथा प्रिंट करें नहीं यह एक बिटोनिक सरणी नहीं है। एक बिटोनिक सरणी तब होती है जब सरणी पहले सख्ती से बढ़ते क्रम में होती

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

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

    1. जांचें कि क्या दिया गया सरणी सी ++ में बाइनरी सर्च ट्री के प्रीऑर्डर ट्रैवर्सल का प्रतिनिधित्व कर सकता है

      मान लीजिए कि हमारे पास एक सरणी में तत्वों की एक सूची है, हमें यह जांचना होगा कि क्या तत्व बाइनरी सर्च ट्री का प्रीऑर्डर ट्रैवर्सल हो सकता है या नहीं। मान लीजिए कि एक क्रम {40, 30, 35, 80, 100} जैसा है, तो पेड़ जैसा होगा - हम इसे एक स्टैक का उपयोग करके हल कर सकते हैं। इस समस्या को हल करने के लिए ह