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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP