用链表管理学生信息。要求遍历链表,把所有学生的信息输出。学生的信息包含姓名,学号和用链表管理学生信息。要求遍历链表,把所有学生的信息输出。学三门成绩
时间: 2023-08-04 07:22:04 浏览: 94
1_lower7y7_定义一个包含学生信息(学号_成绩)的顺序表和链表(二选一)_姓名_使其具有如下功能_
5星 · 资源好评率100%
好的,这是一道关于链表的经典问题。我来给您讲解一下如何实现。
首先,我们需要定义一个结构体来表示每个学生的信息。结构体中包含姓名、学号和三门成绩,如下所示:
```c
struct student {
char name[20];
int id;
int score1, score2, score3;
struct student *next;
};
```
其中,next指针用于连接下一个学生的信息。接下来,我们可以定义一个指向链表头部的指针,如下所示:
```c
struct student *head = NULL;
```
接下来,我们可以编写一个函数来创建链表。在这个函数中,我们可以使用循环来读取每个学生的信息,并将它们添加到链表中。具体实现如下:
```c
void create_list() {
int n; // 学生数量
printf("请输入学生数量:");
scanf("%d", &n);
struct student *p, *prev;
for (int i = 0; i < n; i++) {
p = (struct student*) malloc(sizeof(struct student));
printf("请输入第%d个学生的姓名、学号和三门成绩:", i+1);
scanf("%s %d %d %d %d", p->name, &p->id, &p->score1, &p->score2, &p->score3);
p->next = NULL;
if (head == NULL) {
head = p;
} else {
prev->next = p;
}
prev = p;
}
}
```
接下来,我们可以编写一个函数来遍历链表,并输出每个学生的信息。具体实现如下:
```c
void print_list() {
if (head == NULL) {
printf("链表为空。\n");
} else {
struct student *p = head;
while (p != NULL) {
printf("姓名:%s 学号:%d 成绩:%d %d %d\n", p->name, p->id, p->score1, p->score2, p->score3);
p = p->next;
}
}
}
```
最后,我们在主函数中调用create_list函数来创建链表,然后调用print_list函数来输出链表中所有学生的信息。完整代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
struct student {
char name[20];
int id;
int score1, score2, score3;
struct student *next;
};
struct student *head = NULL;
void create_list() {
int n; // 学生数量
printf("请输入学生数量:");
scanf("%d", &n);
struct student *p, *prev;
for (int i = 0; i < n; i++) {
p = (struct student*) malloc(sizeof(struct student));
printf("请输入第%d个学生的姓名、学号和三门成绩:", i+1);
scanf("%s %d %d %d %d", p->name, &p->id, &p->score1, &p->score2, &p->score3);
p->next = NULL;
if (head == NULL) {
head = p;
} else {
prev->next = p;
}
prev = p;
}
}
void print_list() {
if (head == NULL) {
printf("链表为空。\n");
} else {
struct student *p = head;
while (p != NULL) {
printf("姓名:%s 学号:%d 成绩:%d %d %d\n", p->name, p->id, p->score1, p->score2, p->score3);
p = p->next;
}
}
}
int main() {
create_list();
print_list();
return 0;
}
```
希望我的解答能够帮到您。如果您还有其他问题,可以继续提问哦。
阅读全文