详细注释代码void delete_contact() { char name[NAME_LEN]; printf("请输入要删除的联系人姓名: "); scanf("%s", name); Contact *prev = NULL, *cur = head; while(cur != NULL) { if(strcmp(cur->name, name) == 0) { if(prev == NULL) { head = cur->next; } else { prev->next = cur->next; } free(cur); printf("已成功删除联系人!\n"); return; } prev = cur; cur = cur->next; } printf("未找到指定姓名的联系人!\n"); }
时间: 2024-02-14 15:13:33 浏览: 42
这段代码是一个删除联系人的函数,具体的实现流程如下:
1. 首先定义了一个字符数组name,用来存储输入的联系人姓名。
2. 接下来使用printf函数输出提示信息,要求用户输入要删除的联系人姓名。
3. 使用scanf函数获取用户输入的联系人姓名,并将其存储在name数组中。
4. 接下来定义两个Contact类型的指针变量prev和cur,分别初始化为NULL和head。其中head是一个全局变量,用来存储联系人列表的头结点。
5. 进入while循环,判断cur指针是否为NULL,如果为NULL则说明已经遍历完整个联系人列表,退出循环。
6. 在循环中,判断当前联系人的姓名是否与用户输入的姓名相同,如果相同则说明找到了要删除的联系人,执行删除操作。
7. 在删除操作中,如果prev指针为NULL,则说明要删除的是头结点,将head指向cur的下一个节点;否则将prev的next指针指向cur的下一个节点。
8. 调用free函数释放cur指针指向的内存空间,并输出删除成功的提示信息,退出函数。
9. 如果在整个联系人列表中没有找到要删除的联系人,则输出未找到的提示信息,退出函数。
下面是代码的注释:
```c
void delete_contact() { // 定义一个函数,用来删除联系人
char name[NAME_LEN]; // 定义一个字符数组,用来存储输入的联系人姓名
printf("请输入要删除的联系人姓名: "); // 输出提示信息
scanf("%s", name); // 获取用户输入的联系人姓名
Contact *prev = NULL, *cur = head; // 定义两个Contact类型的指针变量prev和cur,分别初始化为NULL和head
while(cur != NULL) { // 进入while循环,遍历联系人列表
if(strcmp(cur->name, name) == 0) { // 判断当前联系人的姓名是否与用户输入的姓名相同
if(prev == NULL) { // 如果prev指针为NULL,则说明要删除的是头结点
head = cur->next; // 将head指向cur的下一个节点
} else {
prev->next = cur->next; // 否则将prev的next指针指向cur的下一个节点
}
free(cur); // 释放cur指针指向的内存空间
printf("已成功删除联系人!\n"); // 输出删除成功的提示信息
return; // 退出函数
}
prev = cur; // 将prev指针指向cur指针指向的节点
cur = cur->next; // 将cur指针指向下一个节点
}
printf("未找到指定姓名的联系人!\n"); // 如果在整个联系人列表中没有找到要删除的联系人,则输出未找到的提示信息
}
```
阅读全文