使用 C++ 设计电话簿

c++server side programmingprogramming

假设我们要设计一个支持以下操作的电话簿 −

  • 获取 − 这将提供一个未分配给任何人的号码。

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

  • 释放 −这将回收或释放一个数字。

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

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

  • 定义一个集合 s

  • 定义一个可用队列

  • 初始化程序将采用 maxNumbers。

  • N := maxNumbers

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

    • 将 i 插入 available 中

  • 定义一个函数 get()

  • 如果 available 的大小等于 0,则 −

    • 返回 -1

  • x := available 的第一个元素

  • 将 x 插入 s

  • 从 available 中删除元素

  • 返回 x

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

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

    • 返回 false

  • 返回 true number is not in s

  • 定义一个函数 release(),这将接受 number,

  • 如果 check(number),则 −

    • 返回

  • x := number

  • 从 s 中删除 x

  • 将 x 插入 available

示例

让我们看下面的实现,以便更好地理解 −

#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

相关文章