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 −

 Live Demo

#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
Updated on: 2020-11-19T09:52:43+05:30

609 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements