c++ 线性表——数组描述 应用:通讯录

#数据结构#

#线性表——数组描述#

2023.10.8

通讯录

要求

  1. 不要使用 STL
  2. 封装线性表类,提供插入,删除,查找等操作
  3. 线性表实现使用数组描述方法(顺序存储结构)

描述

设通讯录中每一个联系人的内容有:姓名、电话号码、班级、宿舍。由标准输入读入联系人信息,使用线性表中操作实现通讯录管理功能,包括:插入、删除、编辑、查找(按姓名查找);键盘输入一班级,输出通讯录中该班级中所有人的信息。

格式

每个操作的第一个数为操作数(插入-0,删除-1,编辑-2,查找-3,输出一个班所有人员信息-4),具体格式如下:

  • 0 姓名 电话 班级 宿舍 插入一条记录
  • 1 姓名 根据姓名删除一条记录
  • 2 姓名 编辑项目 项目新值 根据姓名编辑一条记录(编辑项目为 1 到 3 的整数,1 代表编辑电话,2 代表编辑班级,3 代表编辑宿舍)
  • 3 姓名 根据姓名查找,找到输出 1,未找到输出 0
  • 4 班级 输出该班级的所有成员的宿舍号的异或值

其中查找操作当找到相应的人时输出 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;
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值