动态通讯录¶
Deadline
2026年4月10日23:59
题目背景¶
请你实现一个简单的动态通讯录。通讯录中的每条记录包含姓名和电话号码,姓名不重复。系统需要支持新增、修改、删除、查找和整体输出。
题目描述¶
给定若干条操作,请按照要求维护通讯录:
add name phone若name不存在,则加入一条新记录;若已存在,则忽略该操作。update name phone若name存在,则把电话号码修改为phone;若不存在,则忽略该操作。delete name若name存在,则删除该记录;若不存在,则忽略该操作。find name输出该联系人的电话号码;若不存在,则输出NOT FOUND。print按当前存储顺序输出所有联系人,格式为name:phone,相邻记录之间用一个空格分隔;若通讯录为空,则输出EMPTY。
输入格式¶
第一行输入一个整数 q,表示操作总数。
接下来 q 行,每行是一条操作,格式如题目描述所示。
输出格式¶
对于每一条 find 操作和每一条 print 操作,各输出一行结果。
数据范围¶
1 <= q <= 200name长度不超过31,且只包含英文字母phone长度不超过31,且只包含数字字符
时间限制¶
1 秒
内存限制¶
128 MB
样例¶
输入¶
8
add alice 1350000
add bob 1391111
find alice
update bob 1888888
find bob
delete alice
find alice
print
输出¶
1350000
1888888
NOT FOUND
bob:1888888
提示¶
- 可以使用结构体
Contact表示单个联系人。 - 可以使用动态数组存储联系人列表,并在容量不足时扩容。
- 删除联系人后,需要保持其余联系人顺序不变。
find和update前,可以先查找姓名是否存在。
实现要求¶
- 必须使用结构体保存联系人信息。
- 必须使用指针管理字符串内存。
- 必须使用二级指针或等价方式完成通讯录扩容,例如维护
Contact **items。 - 建议至少拆分为联系人模块、通讯录模块、主程序三部分。
- 工程需要能通过
Makefile或CMakeLists.txt构建。 - 平台无法进行
CMake编译,所以需要同学将所有文件放在同一目录下。