写一个程序,定义以下结构类型,调用函数创建一个动态链表,并且输出该链表。 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-02-05 16:31:14 浏览: 90
这是一个可以用来创建动态链表、插入节点、打印链表的程序示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义结构体类型
struct Student {
int num;
char name[20];
float score[3];
struct Student *next; // 指向下一个节点的指针
};
// 定义创建动态链表的函数
struct Student *create_list(void) {
struct Student *head = NULL; // 初始化头指针为 NULL
struct Student *p; // 定义一个指向结构体类型的指针
int num;
char name[20];
float score[3];
// 提示用户输入学生信息
printf("请输入学生信息(学号 姓名 成绩1 成绩2 成绩3):\n");
// 使用 scanf 函数从标准输入中读取学生信息
while (scanf("%d%s%f%f%f", &num, name, &score[0], &score[1], &score[2]) == 5) {
// 动态分配内存空间
p = (struct Student*)malloc(sizeof(struct Student));
if (p == NULL) { // 判断内存分配是否成功
printf("分配内存空间失败\n");
exit(1);
}
// 将学生信息存储到动态分配的内存中
p->num = num;
strcpy(p->name, name);
memcpy(p->score, score, sizeof(score));
p->next = NULL; // 初始化指向下一个节点的指针为 NULL
// 将新节点插入到链表中
if (head == NULL) { // 如果是第一个节点
head = p;
} else { // 如果不是
阅读全文