用C ++设计电话目录

假设我们要设计一个支持以下操作的电话目录-

  • get-这将提供未分配给任何人的号码。

  • 检查-这将检查号码是否可用。

  • 发布-这将回收或发布号码。

使用初始化程序,我们可以首先初始化n个数字

为了解决这个问题,我们将遵循以下步骤-

  • 定义一组

  • 定义一个队列

  • 初始化程序将使用maxNumbers。

  • N:= maxNumbers

  • 对于初始化i:= 0,当i <N时,更新(将i增加1),执行-

    • 将我插入可用

  • 定义功能 get()

  • 如果可用大小等于0,则-

    • 返回-1

  • x:=可用的第一个元素

  • 将x插入s

  • 从可用中删除元素

  • 返回x

  • 定义一个函数check(),它将取数字,

  • 如果数字> = N或数字<0,则-

    • 返回假

  • 返回真数字不在s中

  • 定义一个函数release(),它将取数字,

  • 如果check(number),则-

    • 返回

  • 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