用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