C++电话簿设计


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

  • get - 获取一个未分配的号码。

  • check - 检查一个号码是否可用。

  • release - 回收或释放一个号码。

可以使用初始化器一开始初始化n个号码。

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

  • 定义一个集合s

  • 定义一个队列available

  • 初始化器将接收maxNumbers。

  • N := maxNumbers

  • for 初始化 i := 0, 当 i < N, 更新 (i 加 1), 执行:

    • 将i插入available

  • 定义函数get()

  • 如果available的大小为0,则:

    • 返回 -1

  • x := available的第一个元素

  • 将x插入s

  • 从available中删除该元素

  • 返回x

  • 定义函数check(),它将接收number,

  • 如果number >= N 或 number < 0,则:

    • 返回false

  • 返回true (如果number不在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

更新于:2020年11月19日

505 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.