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

C++ में फ़्रीक्वेंसी स्टैक बनाने का कार्यक्रम

मान लीजिए कि हम फ़्रीक्वेंसीस्टैक नामक एक स्टैक का निर्माण करना चाहते हैं, हमारे फ़्रिक्वेंसीस्टैक के दो कार्य हैं -

  • एपेंड (x), यह एक मान x को स्टैक पर जोड़ देगा या धकेल देगा।

  • पॉप (), यह स्टैक में सबसे अधिक बार आने वाले तत्व को हटा देगा और वापस कर देगा। यदि समान आवृत्ति वाले एक से अधिक तत्व हैं, तो स्टैक के शीर्ष के निकटतम तत्व को हटा दिया जाता है और वापस कर दिया जाता है।

इसलिए, यदि इनपुट 7, 9, 7, 9, 6, 7 जैसे कुछ तत्वों को जोड़ने जैसा है, तो पॉप ऑपरेशन चार बार करें, फिर आउटपुट क्रमशः 7,9,7,6 होगा।

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

  • एक मानचित्र को परिभाषित करें

  • एक नक्शा एसटीएस परिभाषित करें

  • मैक्सफ्रीक:=0

  • फंक्शन एपेंड () को परिभाषित करें, इसमें x लगेगा,

  • (cnt[x] 1 से बढ़ाएं)

  • maxFreq :=अधिकतम अधिकतम फ़्रीक और cnt[x]

  • एसटीएस में एक्स डालें [सीएनटी [एक्स]]

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

  • maxKey :=maxFreq

  • x :=sts का शीर्ष तत्व [maxKey]

  • एसटीएस से तत्व हटाएं [मैक्सकी]

  • यदि sts[maxKey] का आकार 0 के समान है, तो -

    • मैक्सकी को एसटीएस से हटाएं

    • (maxFreq को 1 से घटाएं)

  • (cnt[x] 1 से घटाएं)

  • वापसी x

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class FreqStack {
   public:
   unordered_map <int ,int > cnt;
   unordered_map <int, stack <int> >sts;
   int maxFreq = 0;
   FreqStack() {
      maxFreq = 0;
      cnt.clear();
      sts.clear();
   }
   void append(int x) {
      cnt[x]++;
      maxFreq = max(maxFreq, cnt[x]);
      sts[cnt[x]].push(x);
   }
   int pop() {
      int maxKey = maxFreq;
      int x = sts[maxKey].top();
      sts[maxKey].pop();
      if(sts[maxKey].size() == 0){
         sts.erase(maxKey);
         maxFreq−−;
      }
      cnt[x]−−;
      return x;
   }
};
main(){
   FreqStack ob;
   ob.append(7);
   ob.append(9);
   ob.append(7);
   ob.append(9);
   ob.append(6);
   ob.append(7);
   cout << (ob.pop()) << endl;
   cout << (ob.pop()) << endl;
   cout << (ob.pop()) << endl;
   cout << (ob.pop()) << endl;
}

इनपुट

ob.append(7);
ob.append(9);
ob.append(7);
ob.append(9);
ob.append(6);
ob.append(7);
cout << (ob.pop()) << endl;
cout << (ob.pop()) << endl;
cout << (ob.pop()) << endl;
cout << (ob.pop()) << endl;

आउटपुट

7
9
7
6

  1. L ={0m1(n+m)2n | . के लिए पुशडाउन ऑटोमेटा का निर्माण करें सी ++ में एम, एन =0}

    हमें L भाषा दी गई है और कार्य दी गई भाषा के लिए एक पुशडाउन ऑटोमेटा का निर्माण करना है जो बताता है कि 1 की घटनाएँ 0 और 2 की घटनाओं का जोड़ होंगी और साथ ही, 0 और 2 की घटना न्यूनतम होगी जो स्ट्रिंग को NULL भी बना सकती है और इसे ऑटोमेटा द्वारा स्वीकार किया जाना चाहिए। पुशडाउन ऑटोमेटा क्या है? एक पुशडाउ

  1. L ={0(n+m)1m2n | . के लिए पुशडाउन ऑटोमेटा का निर्माण करें एम, एन =0} सी++ में

    हमें L भाषा दी गई है और कार्य दी गई भाषा के लिए एक पुशडाउन ऑटोमेटा का निर्माण करना है जो बताता है कि 0 की घटनाएं 1 और 2 की घटनाओं का जोड़ होंगी और साथ ही, 1 और 2 की घटना न्यूनतम होगी जो स्ट्रिंग को NULL भी बना सकती है और इसे ऑटोमेटा द्वारा स्वीकार किया जाना चाहिए। पुशडाउन ऑटोमेटा क्या है? एक पुशडाउ

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

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