使用线性表实现一个通讯录,通讯录内容有:学号、姓名、电话号码。使其完成以下功能。
(1) 建立一个通讯录
(2) 插入一个数据元素
(3) 删除一个元素,返回其值
(4) 结束程序
请写出基本的算法思想。
一,定义一个通讯录的数据结构
struct Contact {
int id; // 学号
std::string name; // 姓名
std::string phone; // 电话号码
};
二,定义一个通讯录(使用数组)
class AddressBook {
private:
Contact contacts[MAX_SIZE]; // 假设通讯录的最大容量为 MAX_SIZE
int size; // 当前通讯录中的联系人数量
public:
AddressBook() : size(0) {}
// 其他功能方法...
};
三,实现功能方法
- 建立一个通讯录:初始化;
- 插入一个数据元素,需要检查通讯录是否已满(即size是否等于MAX_SIZE);
- 删除一个元素,返回其值,找到要删的元素,将所有元素前移一位以覆盖要删除的元素。
- 结束程序。
bool AddressBook::insert(const Contact& contact) {
if (size >= MAX_SIZE) {
return false; // 通讯录已满,插入失败
}
contacts[size] = contact;
size++;
return true; // 插入成功
}
bool AddressBook::remove(int id, Contact& removedContact) {
for (int i = 0; i < size; i++) {
if (contacts[i].id == id) {
removedContact = contacts[i]; // 保存被删除的元素
for (int j = i; j < size - 1; j++) {
contacts[j] = contacts[j + 1]; // 将后面的元素向前移动
}
size--; // 减少通讯录中的联系人数量
return true; // 删除成功
}
}
return false; // 未找到要删除的元素,删除失败
}
四,主函数
在主函数中创建对象,使用上述功能。
int main() {
AddressBook addressBook;
// 插入一些联系人信息...
Contact contact1 = {1, "张三", "123456789"};
addressBook.insert(contact1);
// 插入其他联系人信息...
// 删除一个联系人并获取其信息...
Contact removedContact;
if (addressBook.remove(1, removedContact)) {
std::cout << "已删除联系人: " << removedContact.name << std::endl;
} else {
std::cout << "未找到要删除的联系人" << std::endl;
}
// ...其他操作...
return 0; // 程序结束
}