STU *Search_sub(STU *head, char *maj, int sub, int sco) { //查找某个专业某门成绩小于某个分数的同学 now = head; STU *newstuhead, *newstu; //建立新符合要求的链表 newstu = (STU *)malloc(len); int flag = 0 ; newstuhead = newstu; while (now != NULL) { if (strcmp(maj, now->major) == 0 && (sco > (now->score[sub - 1]))) { if (flag != 0) { newstu->next = (STU *)malloc(len); newstu = newstu->next; } strcpy(newstu->num, now->num); strcpy(newstu->name, now->name); strcpy(newstu->major, now->major); newstu->classNo = now->classNo; newstu->score[0] = now->score[0]; newstu->score[1] = now->score[1]; newstu->score[2] = now->score[2]; flag++; } now = now->next; } newstu->next = NULL; return newstuhead; }
时间: 2024-04-21 18:25:00 浏览: 87
该函数的作用是在链表中查找某个专业某门成绩小于某个分数的同学,并返回一个新的链表包含符合要求的同学。
函数首先定义了一个指针变量 `now`,指向链表头节点,然后定义了两个新的链表指针变量 `newstuhead` 和 `newstu`,用于构建符合要求的新链表。
接下来,函数通过遍历链表的方式,判断每个节点的专业和指定科目的成绩是否符合要求。如果满足条件,则将该节点的信息复制到新链表节点中,并将 `flag` 计数器加一。如果 `flag` 不为零,则动态分配一个新节点,并将 `newstu` 指针指向该节点。
最后,将新链表的尾节点的 `next` 指针置为 `NULL`,并返回新链表的头节点 `newstuhead`。
需要注意的是,函数中使用了 `malloc(len)` 来动态分配节点内存空间,但是代码中没有给出 `len` 的定义和赋值,这部分代码可能存在问题。另外,函数中并未对动态分配的内存进行释放,在实际应用中需注意防止内存泄漏。
阅读全文