请用c语言实现两个函数,一个将输入的学生成绩组织成单向链表;另一个将成绩低于某分数线的学生结点从链表中删除。
时间: 2024-05-13 10:20:22 浏览: 9
好的,很高兴能够回答你的问题。以下是 C 语言实现两个函数的代码:
```
#include <stdio.h>
#include <stdlib.h>
// 定义学生结构体
typedef struct student {
int num;
char name[20];
int score;
struct student *next;
} Student;
// 将输入的学生成绩组织成单向链表
Student *createLinkedList() {
Student *head = NULL, *node = NULL, *last = NULL;
int num, score;
char name[20];
printf("请输入学生的学号、姓名和成绩,以-1结束\n");
while (1) {
scanf("%d", &num);
if (num == -1) break;
scanf("%s %d", name, &score);
node = (Student *)malloc(sizeof(Student));
node -> num = num;
strcpy(node -> name, name);
node -> score = score;
node -> next = NULL;
if (head == NULL) head = node;
else last -> next = node;
last = node;
}
return head;
}
// 将成绩低于某分数线的学生结点从链表中删除
Student *deleteStudents(Student *head, int score) {
Student *p, *prev;
p = head;
prev = NULL;
while (p != NULL) {
if (p -> score < score) {
if (prev == NULL) {
head = p -> next;
} else {
prev -> next = p -> next;
}
free(p);
p = prev == NULL ? head : prev -> next;
} else {
prev = p;
p = p -> next;
}
}
return head;
}
int main() {
Student *head = NULL;
int score;
head = createLinkedList();
printf("请输入成绩分数线:\n");
scanf("%d", &score);
head = deleteStudents(head, score);
printf("剩余学生信息如下:\n");
Student *p = head;
while (p != NULL) {
printf("%d %s %d\n", p -> num, p -> name, p -> score);
p = p -> next;
}
return 0;
}
```
希望这段代码能够解答你的问题。如果您有其他问题,请随时问我。