#数据结构#
#线性表——数组描述#
2023.10.8
通讯录
要求
- 不要使用 STL
- 封装线性表类,提供插入,删除,查找等操作
- 线性表实现使用数组描述方法(顺序存储结构)
描述
设通讯录中每一个联系人的内容有:姓名、电话号码、班级、宿舍。由标准输入读入联系人信息,使用线性表中操作实现通讯录管理功能,包括:插入、删除、编辑、查找(按姓名查找);键盘输入一班级,输出通讯录中该班级中所有人的信息。
格式
每个操作的第一个数为操作数(插入-0,删除-1,编辑-2,查找-3,输出一个班所有人员信息-4),具体格式如下:
0 姓名 电话 班级 宿舍
插入一条记录1 姓名
根据姓名删除一条记录2 姓名 编辑项目 项目新值
根据姓名编辑一条记录(编辑项目为 1 到 3 的整数,1 代表编辑电话,2 代表编辑班级,3 代表编辑宿舍)3 姓名
根据姓名查找,找到输出 1,未找到输出 04 班级
输出该班级的所有成员的宿舍号的异或值
其中查找操作当找到相应的人时输出 1,未找到输出 0。输出一个班级的人员信息时输出所有成员的宿舍号的异或值。输入数据保证合法。
输入
第一行一个 n(1<=n<=20000), 代表接下来操作的数目。接下来 n 行代表各项操作。
输出
当遇到查找和输出一个班所有人员信息操作时输出。
样例
输入
28
0 Evan 57298577609 1 65
0 WINNIE 37367348390 4 1
3 Evan
4 6
3 WINNIE
1 Evan
4 7
1 WINNIE
3 MARYAM
3 CAMERON
3 TZIVIA
0 OMAR 16447001130 6 55
4 8
4 2
3 JADEN
3 ELIZABETH
2 OMAR 1 79409905568
3 JOSHUA
2 OMAR 1 8978214817
1 OMAR
3 Azaan
3 MARIA
0 HANNAH 94060479192 5 98
3 HEIDY
1 HANNAH
0 Axel 92066832927 3 70
1 Axel
3 TIFFANY
输出
1
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
限制
1s
思路:
使用arrayList.h,定义struct结构体txl,具有四个string类型的变量name、phone、classroom、dormitory。main函数中arrayList<txl>phoneBook;创建一个arraylist
0插入记录使用push_back函数
1删除记录使用get函数遍历name找到name相同的元素索引,使用erase函数删除该索引的元素
2编辑记录使用get函数遍历name找到name相同的元素索引并编辑
3姓名查找录使用get函数遍历name找到name相同的元素查找
4输出异或值使用get函数遍历classroom找到classroom相同的元素并进行^=.
代码部分:
struct txl {
string name;
string phone;
string classroom;
string dormitory;
};
int main() {
arrayList<txl>phoneBook;
int op;
cin >> op;
for (int i = 0; i < op; i++) {
int step;
cin >> step;
if (step == 0) {
string name, phone, classId, dormitory;
cin >> name >> phone >> classId >> dormitory;
phoneBook.push_back({ name, phone, classId, dormitory });
}
else if (step == 1) {
string name;
cin >> name;
for (int j = 0; j < phoneBook.size(); j++) {
if (phoneBook.get(j).name == name) {
phoneBook.erase(j);
break;
}
}
}
else if (step == 2) {
string name;
int editItem;
string newItem;
cin >> name >> editItem >> newItem;
for (int j = 0; j < phoneBook.size(); j++) {
if (phoneBook.get(j).name == name) {
if (editItem == 1) phoneBook.get(j).phone = newItem;
else if (editItem == 2) phoneBook.get(j).classroom = newItem;
else if (editItem == 3) phoneBook.get(j).dormitory = newItem;
break;
}
}
}
else if (step == 3) {
string name;
cin >> name;
int found = 0;
for (int j = 0; j < phoneBook.size(); j++) {
if (phoneBook.get(j).name == name) {
found = 1;
break;
}
}
cout << found << endl;
}
else if (step == 4) {
string classId;
cin >> classId;
int dormitoryXor = 0;
for (int j = 0; j < phoneBook.size(); j++) {
if (phoneBook.get(j).classroom == classId) {
dormitoryXor ^= stoi(phoneBook.get(j).dormitory);
}
}
cout << dormitoryXor << endl;
}
}
}