写一个程序,定义以下结构类型,调用函数创建一个动态链表,并且输出该链表。 struct Student { int num; char name[20]; float score[3]; struct Student * next; }; 测试用例:程序执行,提示请用户输入学生数据, 用户输入: 1, zhang, 70,80,90回车, 程序执行,提示请用户输入结点数据, 用户输入: 2, li, 70,80,90回车, 程序执行,提示请用户输入结点数据, 用户输入: 3, wang, 70,80,90回车, 程序执行,提示请用户输入结点数据, 用户输入: 0, 0, 0,0,0回车, 程序输出: 1, zhang, 70.00, 80.00, 90.00, 2, li, 70.00, 80.00, 90.00, 3, wang, 70.00, 80.00, 90.00
时间: 2023-01-28 19:26:00 浏览: 85
以下是程序的实现:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Student {
int num;
char name[20];
float score[3];
struct Student * next;
};
int main()
{
struct Student * head = NULL; // 定义头指针
struct Student * tail = NULL; // 定义尾指针
struct Student * p; // 定义指向结构体的指针
// 读入学生数据,直到 num 为 0 为止
while (1)
{
printf("请输入学生数据:\n");
p = (struct Student *)malloc(sizeof(struct Student)); // 分配内存
scanf("%d, %s, %f, %f, %f", &p->num, p->name, &p->score[0], &p->score[1], &p->score[2]); // 读入学生数据
p->next = NULL; // 将 next 赋为 NULL
if (p->num == 0) // 如果 num 为 0,则退出循环
{
free(p); // 释放内存
break;
}
if (head == NULL) // 如果链表为空
{
head = p; // 将头指针指向第一个结点
tail = p; // 将尾指针也指向第一个结点
}
else // 如果链表不为空
{
tail->next = p; // 将尾指针的 next 指向新结点
tail = p; // 将尾指针指向新结点
}
}
// 输出链表中的所有学生数据
printf("输出链表中的所有学生数据:\n");
p = head; // 从链表的第一个结点开始
while (p != NULL) // 当 p 不为 NULL 时
{
printf("%d, %s, %.2f, %.2f, %.2f\n", p->
阅读全文