मान लीजिए हम एक फोन निर्देशिका डिजाइन करना चाहते हैं जो निम्नलिखित कार्यों का समर्थन करती है -
-
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