if (strcmp(cur->data, jone) == 0) { // 在jone前插入marit Node* new_node = (Node*)malloc(sizeof(Node)); new_node->data = *marit; new_node->next = cur; prev->next = new_node; return; }
时间: 2023-06-23 19:08:17 浏览: 85
这段代码是一个链表的插入操作,它的作用是在链表中名为 jone 的节点之前插入一个名为 marit 的新节点。
首先,它通过 `strcmp` 函数比较当前节点 `cur` 的数据域 `cur->data` 是否与字符串 "jone" 相等。如果相等,则表明找到了名为 jone 的节点,可以在它前面插入新节点。
接下来,它创建一个新的节点 `new_node`,并将新节点的数据域设置为 `marit` 指向的值(假设 `marit` 是一个指向要插入的数据的指针)。然后,将新节点的 `next` 指针指向当前节点 `cur`,将当前节点的前一个节点 `prev` 的 `next` 指针指向新节点。这样就完成了在 jone 前插入新节点的操作。
需要注意的是,如果链表中没有名为 jone 的节点,那么这段代码不会执行插入操作,也不会报错。
相关问题
代码详细注释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"); // 输出排序完成的提示信息
}
}
为以下代码增加修改部门成员的功能:#include <stdio.h> #include <stdlib.h> #include <string.h> // 定义一个学生结构体 typedef struct student { char name[20]; // 姓名 int id; // 学号 char dept[20]; // 部门 struct student *next; // 下一个学生 struct student *child; // 第一个子节点 } Student; // 定义一个全局变量,存储学生会组织架构 Student *root = NULL; // 添加一个新的学生到指定的部门中 void addStudent(char *dept, char *name, int id) { // 创建一个新的学生节点 Student *newStudent = (Student*)malloc(sizeof(Student)); strcpy(newStudent->name, name); newStudent->id = id; strcpy(newStudent->dept, dept); newStudent->next = NULL; newStudent->child = NULL; // 如果学生会组织架构为空,则新节点为根节点 if (root == NULL) { root = newStudent; return; } // 查找指定部门的最后一个学生节点 Student *cur = root; while (cur != NULL) { if (strcmp(cur->dept, dept) == 0) { while (cur->next != NULL) { cur = cur->next; } cur->next = newStudent; return; } cur = cur->child; } // 如果指定部门不存在,则创建新的部门节点 Student *newDept = (Student*)malloc(sizeof(Student)); strcpy(newDept->name, dept); newDept->id = -1; newDept->next = NULL; newDept->child = newStudent; // 将新部门节点插入到学生会组织架构中 cur = root; while (cur->child != NULL) { cur = cur->child; } cur->child = newDept; } // 根据学号查找学生信息 Student *findStudent(int id) { Student *cur = root; while (cur != NULL) { Student *s = cur->child; while (s != NULL) { if (s->id == id) { return s; } s = s->next; } cur = cur->child; } return NULL; } // 输出指定部门的所有学生信息 void printDept(char *dept) { Student *cur = root; while (cur != NULL) { if (strcmp(cur->dept, dept) == 0) { printf("%s部门成员:\n", dept); Student *s = cur->child; while (s != NULL) { printf("姓名:%s\t学号:%d\n", s->name, s->
id); s = s->next; } return; } cur = cur->child; } printf("该部门不存在!\n"); }
// 修改指定学号的成员的部门 void modifyDept(int id, char *newDept) { Student *cur = root; while (cur != NULL) { Student *s = cur->child; while (s != NULL) { if (s->id == id) { strcpy(s->dept, newDept); // 修改部门 return; } s = s->next; } cur = cur->child; } printf("该学号不存在!\n"); }
// 主函数 int main() { addStudent("办公室", "张三", 1001); addStudent("办公室", "李四", 1002); addStudent("技术部", "王五", 1003); addStudent("技术部", "赵六", 1004); addStudent("财务部", "孙七", 1005); addStudent("人力资源部", "周八", 1006); printf("修改前:\n"); printDept("办公室"); printDept("技术部"); modifyDept(1001, "技术部"); printf("修改后:\n"); printDept("办公室"); printDept("技术部"); return 0; }
在主函数中新增了一个“修改指定学号的成员的部门”函数 modifyDept,它的作用是根据输入的学号和新的部门名称,找到对应的学生节点并修改其部门信息。在该函数中,我们需要遍历整个学生会组织架构来查找指定学号的学生节点,然后修改其部门信息即可。最后在主函数中调用该函数进行测试。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)