使用 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