मान लीजिए हम एक फोन निर्देशिका डिजाइन करना चाहते हैं जो निम्नलिखित कार्यों का समर्थन करती है -
-
get - यह एक ऐसा नंबर प्रदान करेगा जो किसी को नहीं सौंपा गया है।
-
चेक - यह जांच करेगा कि कोई नंबर उपलब्ध है या नहीं।
-
रिलीज़ - यह एक नंबर को रीसायकल या रिलीज़ करेगा।
प्रारंभकर्ता का उपयोग करके, हम पहले n संख्याओं को प्रारंभ कर सकते हैं
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
एक सेट को परिभाषित करें
-
उपलब्ध एक कतार परिभाषित करें
-
प्रारंभकर्ता अधिकतम संख्या लेगा।
-
एन:=अधिकतम संख्या
-
इनिशियलाइज़ i :=0 के लिए, जब i
-
मुझे उपलब्ध में डालें
-
-
फ़ंक्शन को परिभाषित करें get()
-
यदि उपलब्ध का आकार 0 के समान है, तो -
-
वापसी -1
-
-
x :=उपलब्ध का पहला तत्व
-
s में x डालें
-
उपलब्ध से तत्व हटाएं
-
वापसी x
-
फ़ंक्शन चेक को परिभाषित करें (), यह संख्या लेगा,
-
यदि संख्या>=N या संख्या <0, तो -
-
झूठी वापसी
-
-
रिटर्न ट्रू नंबर s में नहीं है
-
फ़ंक्शन रिलीज़ को परिभाषित करें (), यह संख्या लेगा,
-
अगर चेक (संख्या), तो -
-
वापसी
-
-
x:=संख्या
-
s से x हटाएं
-
उपलब्ध में x डालें
उदाहरण
आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -
#include <bits/stdc++.h> using namespace std; class PhoneDirectory { public: set<int< s; queue<int< available; int N; PhoneDirectory(int maxNumbers){ N = maxNumbers; for (int i = 0; i < N; i++) { available.push(i); } } int get(){ if (available.size() == 0) return -1; int x = available.front(); s.insert(x); available.pop(); return x; } bool check(int number){ if (number >= N || number < 0) return false; return s.find(number) == s.end(); } void release(int number){ if (check(number)) return; int x = number; s.erase(x); available.push(x); } }; main(){ PhoneDirectory ob(3); cout << (ob.get()) << endl; cout << (ob.get()) << endl; cout << (ob.check(2)) << endl; cout << (ob.get()) << endl; cout << (ob.check(2)) << endl; ob.release(2); cout << (ob.check(2)) << endl; }
इनपुट
ob.get(); ob.get(); ob.check(2); ob.get(); ob.check(2); ob.release(2); ob.check(2);
आउटपुट
0 1 1 2 0 1