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

C++ में दिए गए संचालन के साथ अधिकतम स्टैक बनाने का कार्यक्रम

मान लीजिए हम एक अधिकतम स्टैक बनाना चाहते हैं, जो निम्नलिखित कार्यों का समर्थन करता है -

  • MaxStk() यह अधिकतम स्टैक का एक नया उदाहरण बनाएगा

  • पुश (वैल) स्टैक में वैल सम्मिलित करता है

  • शीर्ष () स्टैक से शीर्षतम तत्व प्राप्त करें

  • अधिकतम () स्टैक से अधिकतम तत्व प्राप्त करें

  • पॉप () स्टैक से सबसे ऊपरी तत्व को हटाता है और लौटाता है

  • पॉपमैक्स () स्टैक से अधिकतम तत्व को हटाता है और लौटाता है

अब MasStk () को कॉल करके अधिकतम स्टैक का निर्माण करें, फिर तीन मानों जैसे 5, 15, 10 को पुश करें, फिर क्रमशः टॉप (), मैक्स (), पॉपमैक्स (), मैक्स () पॉप (), टॉप () फ़ंक्शन को कॉल करें। तो प्रारंभिक स्टैक स्थिति [5, 15, 10] होगी, और कार्यों के लिए संबंधित आउटपुट:10, 15, 15, 10, 10, 5

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

  • pos_index :=0

  • एक सेट को दूसरे सेट ऑक्स को परिभाषित करें

  • कंस्ट्रक्टर को परिभाषित करें, यह कोई विशेष कार्य नहीं कर रहा है

  • फ़ंक्शन पुश () को परिभाषित करें, यह वैल लेगा,

  • pos_index , val को stk में डालें

  • ऑक्स में वैल, pos_index डालें

  • (pos_index को 1 से बढ़ाएं)

  • फ़ंक्शन को परिभाषित करें top()

  • अगर stk खाली है, तो -

    • वापसी -1

  • stk के पहले आइटम का दूसरा मान लौटाएं

  • एक फ़ंक्शन को परिभाषित करें अधिकतम ()

  • अगर ऑक्स खाली है, तो -

    • वापसी -1

  • ऑक्स के पहले आइटम का पहला मान लौटाएं

  • फ़ंक्शन पॉप को परिभाषित करें ()

  • अगर stk खाली है, तो -

    • वापसी -1

  • आईडी:=stk के पहले आइटम का पहला मान, ret =stk के पहले आइटम का दूसरा मान

  • stk से stk का पहला तत्व हटाएं

  • ऑक्स से जोड़ी (रिट, आईडी) हटाएं

  • वापसी रिट

  • फ़ंक्शन को परिभाषित करें पॉपमैक्स ()

  • अगर ऑक्स खाली है, तो -

    • वापसी -1

  • ret :=aux के पहले आइटम का पहला मान, id =aux के पहले आइटम का दूसरा मान

  • aux से aux का पहला तत्व हटाएं

  • stk से जोड़ी(id, ret) हटाएं

  • वापसी रिट

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class MaxStk {
   int pos_index = 0;
   set<pair<int, int>, greater<>> stk, aux;
   public:
   MaxStk() {}
   void push(int val) {
      stk.emplace(pos_index, val);
      aux.emplace(val, pos_index);
      pos_index++;
   }
   int top() {
      if (stk.empty())
      return −1;
      return stk.begin()−>second;
   }
   int max() {
      if (aux.empty())
      return −1;
      return aux.begin()−>first;
   }
   int pop() {
      if (stk.empty())
      return −1;
      int id = stk.begin()−>first, ret = stk.begin()−>second;
      stk.erase(stk.begin());
      aux.erase({ret, id});
      return ret;
   }
   int popmax() {
      if (aux.empty())
      return −1;
      int ret = aux.begin()−>first, id = aux.begin()−>second;
      aux.erase(aux.begin());
      stk.erase({id, ret});
      return ret;
   }
};
int main(){
   MaxStk max_stk;
   max_stk.push(5);
   max_stk.push(15);
   max_stk.push(10);
   cout << max_stk.top() << endl;
   cout << max_stk.max() << endl;
   cout << max_stk.popmax() << endl;
   cout << max_stk.max() << endl;
   cout << max_stk.pop() << endl;
   cout << max_stk.top() << endl;
}

इनपुट

max_stk.push(5)
max_stk.push(15)
max_stk.push(10)
max_stk.top()
max_stk.max()
max_stk.popmax()
max_stk.max()
max_stk.pop()
max_stk.top()

आउटपुट

10
15
15
10
10
5

  1. C++ प्रोग्राम उन शहरों की संख्या गिनने के लिए जिन्हें हम प्रत्येक शहर से दिए गए कार्यों के साथ देख सकते हैं

    मान लीजिए कि हमारे पास (xi, yi) रूप में N निर्देशांक P की एक सूची है। x और y मान प्रथम N प्राकृत संख्याओं का क्रमपरिवर्तन हैं। 1 से N की श्रेणी में प्रत्येक k के लिए। हम शहर k पर हैं। हम कई बार मनमाने ढंग से संचालन लागू कर सकते हैं। ऑपरेशन:हम दूसरे शहर में जाते हैं जिसमें एक छोटा x-निर्देशांक होता ह

  1. C++ प्रोग्राम कुछ शर्तों के साथ ग्राफ बनाने के लिए

    मान लीजिए कि हमारे पास दो नंबर एन और के हैं। विचार करें कि एन तत्वों के साथ एक अप्रत्यक्ष ग्राफ है। N शीर्ष निम्नलिखित शर्तों को पूरा करते हैं - ग्राफ़ सरल और जुड़ा हुआ है शीर्षों की संख्या 1 से N तक होती है मान लीजिए कि ग्राफ में किनारों की संख्या M है। किनारों को 1 से M तक क्रमांकित किया

  1. सी ++ प्रोग्राम किसी दिए गए उपसर्ग अभिव्यक्ति के लिए एक अभिव्यक्ति वृक्ष का निर्माण करने के लिए

    एक्सप्रेशन ट्री मूल रूप से एक बाइनरी ट्री है जिसका उपयोग एक्सप्रेशन को दर्शाने के लिए किया जाता है। एक्सप्रेशन ट्री में, आंतरिक नोड्स ऑपरेटरों के अनुरूप होते हैं और प्रत्येक लीफ नोड ऑपरेंड के अनुरूप होते हैं। इन-ऑर्डर, प्री-ऑर्डर और पोस्ट-ऑर्डर ट्रैवर्सल में एक्सप्रेशन एक्सप्रेशन के लिए एक्सप्रेशन ट