Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Design Phone Directory in C++
Suppose we want to design a Phone Directory which supports the following operations −
get − This will provide a number that is not assigned to anyone.
check − This will check whether a number is available or not.
release − This will recycle or release a number.
Using the initializer, we can initialize n numbers at first
To solve this, we will follow these steps −
Define one set s
Define one queue available
The initializer will take maxNumbers.
N := maxNumbers
-
for initialize i := 0, when i < N, update (increase i by 1), do −
insert i into available
Define a function get()
-
if size of available is same as 0, then −
return -1
x := first element of available
insert x into s
delete element from available
return x
Define a function check(), this will take number,
-
if number >= N or number < 0, then −
return false
return true number is not in s
Define a function release(), this will take number,
-
if check(number), then −
return
x := number
delete x from s
insert x into available
Example
Let us see the following implementation to get a better understanding −
#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;
}
Input
ob.get(); ob.get(); ob.check(2); ob.get(); ob.check(2); ob.release(2); ob.check(2);
Output
0 1 1 2 0 1