建立5名学生的信息表,每个学生的数据包括学号、姓名及三门课的成绩。要求从键盘输入这5名学生的信息,并按照每一行显示一名学生信息的形式将5名学生的信息显示出来。要求使用链表实现(以尾插法创建链表)
时间: 2024-05-08 14:18:21 浏览: 144
好的,让我来回答你的问题。为了实现这个功能,我们可以先定义一个包含学号、姓名和3门课程成绩的结构体,代码如下:
```c
typedef struct student{
int id;
char name[20];
float score[3];
struct student* next;
}STUDENT;
```
接下来,我们可以按照尾插法的方式创建一个链表,并且从键盘读入每位学生的信息,代码实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i;
STUDENT* head, * p, * tail;
head = tail = NULL;
for (i = 0; i < 5; i++) {
p = (STUDENT*)malloc(sizeof(STUDENT));
printf("请输入第 %d 个学生的学号,姓名,成绩1,成绩2,成绩3\n", i + 1);
scanf("%d%s%f%f%f", &p->id, p->name, &p->score[0], &p->score[1], &p->score[2]);
p->next = NULL;
if (head == NULL) {
head = p;
}
else {
tail->next = p;
}
tail = p;
}
p = head;
while (p != NULL) {
printf("%d %s %f %f %f\n", p->id, p->name, p->score[0], p->score[1], p->score[2]);
p = p->next;
}
return 0;
}
```
这个程序中,我们先定义了一个头指针`head`和一个尾指针`tail`,它们都指向链表的第一个元素。我们循环5次,每次都分配一个新的节点,并且从键盘读入该节点表示的学生信息。然后我们按照尾插法的方式将新节点插入链表尾部,并且更新`tail`指针指向链表的最后一个元素。
最后,我们使用一个指针`p`遍历整个链表,并且将学生信息逐个输出到屏幕上。
注意,我们在分配新节点的时候使用了`malloc`函数来动态分配内存空间,这是为了防止栈内存不足而导致程序崩溃。在实际开发中,我们需要记得在不需要使用动态内存的时候使用`free`函数释放已占用的内存空间,以免造成内存泄漏。
阅读全文