c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 定义联系人结构体
struct Contact {
char name[50];
char phoneNumber[20];
struct Contact *next;
};
// 定义全局变量以跟踪联系人列表的末尾
struct Contact *lastContact = NULL;
// 添加联系人函数
void addContact() {
struct Contact *newContact = (struct Contact*)malloc(sizeof(struct Contact));
printf("请输入联系人的姓名:n");
scanf("%s", newContact->name);
printf("请输入联系人的电话号码:n");
scanf("%s", newContact->phoneNumber);
newContact->next = NULL;
if (lastContact == NULL) { // 如果列表为空,新联系人是第一个联系人
lastContact = newContact;

return;
} else { // 在列表末尾添加联系人
struct Contact *temp = lastContact; // 获取当前最后一个联系人
while (temp->next != NULL) { // 寻找最后一个联系人的下一个位置(即列表末尾)
temp = temp->next;
}
temp->next = newContact; // 将新联系人添加到末尾
return;
}
// 删除联系人函数
void deleteContact() {
struct Contact *tempContact;
if (lastContact == NULL) {
printf("电话本为空,无法删除,n");
return;
} else if (lastContact == lastContact->next) { // 如果只有一个联系人,删除该联系人后列表为空
tempContact = lastContact;
lastContact = NULL;
free(tempContact);
return;
} else { // 删除指定联系人
struct Contact *toDelete, *prevContact = NULL;
printf("请输入要删除的联系人的姓名:n");
struct Contact *currentContact = lastContact;
while (currentContact != NULL) {
if (strcmp(currentContact->name, inputName) == 0) { // 找到要删除的联系人
if (prevContact == NULL) { // 如果要删除的联系人是第一个联系人,更新列表头
toDelete = lastContact;
lastContact = lastContact->next;
free(toDelete);
} else { // 删除其他联系人
prevContact->next = currentContact->next;
free(currentContact);
}
return;
} else { // 继续搜索列表中的联系人
prevContact = currentContact;
currentContact = currentContact->next;
}
}
printf("未找到该联系人,n"); // 如果未找到联系人,输出提示信息并退出函数
return;
}
//查找联系人函数(此处省略)等其它功能可以根据需求自行添加,注意处理内存分配和释放问题。 //查找联系人函数(此处省略)等其它功能可以根据需求自行添加,注意处理内存分配和释放问题,你可以使用类似的方法来实现查找和编辑联系人的功能,在实现这些功能时,请确保正确地处理内存分配和释放问题,以避免内存泄漏和其他相关问题,你还可以根据需要添加更多的功能,如按姓名或电话号码排序的联系人列表等。




