c语言用链表一个班有若干名学生,学生信息包括学号、姓名和成绩,统计并删除不及格的学生信息。
时间: 2024-03-16 17:47:47 浏览: 74
好的,我来为您解答。
首先,我们需要定义一个学生结构体,包括学号、姓名和成绩:
```c
typedef struct student {
char id[10];
char name[20];
int score;
struct student *next;
} Student;
```
然后,我们需要实现一个函数,用来统计并删除不及格的学生信息。该函数定义如下:
```c
void delete_failed_students(Student **head) {
Student *p, *pre;
p = *head;
pre = NULL;
while (p != NULL) {
if (p->score < 60) {
if (pre == NULL) {
*head = p->next;
} else {
pre->next = p->next;
}
free(p);
p = pre == NULL ? *head : pre->next;
} else {
pre = p;
p = p->next;
}
}
}
```
该函数接受一个指向链表头指针的指针,用来修改链表头指针的值。我们使用 p 和 pre 两个指针来遍历链表,如果发现当前学生成绩不及格,就将其从链表中删除。
具体来说,如果 pre 为空指针,说明当前节点是链表头节点,需要修改链表头指针的值。否则,将 pre 的 next 指向 p 的下一个节点,即删除 p 节点。同时,释放 p 节点内存,并将 p 指向下一个节点。
如果当前节点不需要删除,就将 pre 指向当前节点,p 指向下一个节点,继续遍历链表。
完成上述操作后,不及格的学生信息就被删除了。
完整代码如下:
阅读全文