详细注释这段代码Contact* find_contact_by_name(char name[]) { Contact *cur = head; while(cur != NULL) { if(strcmp(cur->name, name) == 0) { return cur; } cur = cur->next; } return NULL; } Contact* find_contact_by_phone(char phone[]) { Contact *cur = head; while(cur != NULL) { if(strcmp(cur->phone, phone) == 0) { return cur; } cur = cur->next; } return NULL; }
时间: 2024-03-07 21:51:32 浏览: 113
这段代码实现了两个函数,分别是根据姓名和电话号码查找联系人的功能。这里假设已经存在一个联系人结构体 `Contact`,并且已经有一个链表头节点 `head`。
`find_contact_by_name` 函数的作用是查找姓名为 `name` 的联系人,并返回该联系人的指针。首先定义一个指向链表头节点的指针 `cur`,然后使用 `while` 循环遍历链表中的每个节点,直到遍历完链表或者找到了对应姓名的联系人。在循环中,使用 `strcmp` 函数比较当前节点的姓名和传入的参数 `name` 是否相等,如果相等则返回该节点的指针。如果遍历完链表仍然没有找到对应姓名的联系人,则返回 `NULL`。
`find_contact_by_phone` 函数的作用和 `find_contact_by_name` 类似,只不过是根据电话号码查找联系人。同样定义一个指向链表头节点的指针 `cur`,然后使用 `while` 循环遍历链表中的每个节点,直到遍历完链表或者找到了对应电话号码的联系人。在循环中,使用 `strcmp` 函数比较当前节点的电话号码和传入的参数 `phone` 是否相等,如果相等则返回该节点的指针。如果遍历完链表仍然没有找到对应电话号码的联系人,则返回 `NULL`。
相关问题
详细注释这段代码void modify_contact() { char name[NAME_LEN], workplace[WORKPLACE_LEN], phone[PHONE_LEN], email[EMAIL_LEN]; printf("请输入要修改信息的联系人姓名: "); scanf("%s", name); Contact *cur = find_contact_by_name(name); if(cur == NULL) { printf("未找到指定姓名的联系人!\n"); } else
这段代码定义了一个名为 `modify_contact()` 的函数,该函数用于修改联系人信息。函数内部定义了4个字符数组 `name`、`workplace`、`phone`、`email`,分别用于存储联系人的姓名、工作单位、电话号码和电子邮件地址。
该函数首先会通过 `printf()` 函数输出一个提示信息,要求用户输入需要修改信息的联系人的姓名。然后通过 `scanf()` 函数从标准输入流中读取用户输入的姓名,并将其存储到 `name` 数组中。
接下来,该函数调用了一个名为 `find_contact_by_name()` 的函数,该函数用于根据联系人姓名查找联系人信息。如果找到了指定姓名的联系人,则将其信息存储到一个名为 `cur` 的指针变量中;如果未找到,则会通过 `printf()` 函数输出一个提示信息,告诉用户未找到指定姓名的联系人。
函数的最后部分可以参见下一段代码。
代码详细注释void sort_contacts() { if(head == NULL) { printf("通讯录为空!\n"); } else { Contact *prev = NULL, *cur = head; int is_sorted = 0; while(!is_sorted) { is_sorted = 1; prev = NULL; cur = head; while(cur->next != NULL) { if(strcmp(cur->name, cur->next->name) > 0) { is_sorted = 0; if(prev == NULL) { //移动头结点 head = cur->next; cur->next = head->next; head->next = cur; prev = head; } else { Contact *next = cur->next; prev->next = next; cur->next = next->next; next->next = cur; prev = next; } } else { prev = cur; cur = cur->next; } } } printf("已成功按姓名字母排序!\n"); } }
这是一个用于通讯录排序的函数,以下是函数代码的详细注释:
void sort_contacts() {
// 如果通讯录为空,输出提示信息
if(head == NULL) {
printf("通讯录为空!\n");
} else {
Contact *prev = NULL, *cur = head; // 定义 prev 和 cur 指针
int is_sorted = 0; // 定义排序标志,初值为 0
while(!is_sorted) { // 只要未排序完成,就继续排序
is_sorted = 1; // 初始设置为已排序
prev = NULL; // 重置 prev 指针为 NULL
cur = head; // 重置 cur 指针为头结点
while(cur->next != NULL) { // 遍历链表直到末尾
if(strcmp(cur->name, cur->next->name) > 0) { // 如果当前节点的名字大于下一个节点的名字
is_sorted = 0; // 设置排序标志为未排序
if(prev == NULL) { // 如果当前节点是头结点
head = cur->next; // 移动头结点
cur->next = head->next; // 将当前节点的 next 指向 head 的 next
head->next = cur; // 将 head 的 next 指向当前节点
prev = head; // 将 prev 指针设置为 head
} else { // 如果当前节点不是头结点
Contact *next = cur->next; // 定义 next 指针,指向下一个节点
prev->next = next; // 将 prev 的 next 指向 next
cur->next = next->next; // 将当前节点的 next 指向 next 的 next
next->next = cur; // 将 next 的 next 指向当前节点
prev = next; // 将 prev 指针设置为 next
}
} else { // 如果当前节点的名字小于或等于下一个节点的名字
prev = cur; // 将 prev 指针设置为当前节点
cur = cur->next; // 将 cur 指针移动到下一个节点
}
}
}
printf("已成功按姓名字母排序!\n"); // 输出排序完成的提示信息
}
}
阅读全文