用链表实现对学生成绩进行存储、插入及显示功能,学生包括ID和score属性。 结构体类型定义如下: struct grade { int score; char ID[6]; struct grade *next; }; (1)写函数创建单向链表并存储学生成绩信息,输入ID和score按逗号隔开,先输入score后输入ID,当score<0时链表创建完成,并输出创建后的链表信息。 (2)写函数实现在第n个结点后面插入一个新结点,并输出插入新结点后的链表信息。 (3)写函数释放链表所占内存空间。 (在主函数依次调用各函数即可) 程序运行示例1: 输入学生成绩和ID: 23,01 45,03 67,04 -1 创建的链表: 23,01 45,03 67,04 请输入要插入结点的成绩和ID: 78,02 请输入要插入结点的位置,在这个位置后面插入新结点: 3 插入后的链表: 23,01 45,03 67,04 78,02
时间: 2024-03-11 09:49:25 浏览: 16
下面是用链表实现对学生成绩进行存储、插入及显示功能的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct grade {
int score;
char ID[6];
struct grade *next;
};
// 创建单向链表并存储学生成绩信息
struct grade *createList() {
struct grade *head = NULL, *tail = NULL;
int score;
char ID[6];
printf("输入学生成绩和ID:");
while (scanf("%d,%s", &score, ID) != EOF && score >= 0) {
struct grade *node = (struct grade *)malloc(sizeof(struct grade));
node->score = score;
strcpy(node->ID, ID);
node->next = NULL;
if (head == NULL) {
head = tail = node;
} else {
tail->next = node;
tail = node;
}
}
printf("创建的链表:");
struct grade *p = head;
while (p != NULL) {
printf("%d,%s ", p->score, p->ID);
p = p->next;
}
printf("\n");
return head;
}
// 在第n个结点后面插入一个新结点
void insertNode(struct grade *head, int n) {
struct grade *p = head;
int i;
printf("请输入要插入结点的成绩和ID: ");
struct grade *node = (struct grade *)malloc(sizeof(struct grade));
scanf("%d,%s", &node->score, node->ID);
node->next = NULL;
for (i = 1; i < n && p != NULL; i++) {
p = p->next;
}
if (p != NULL) {
node->next = p->next;
p->next = node;
}
printf("插入后的链表:");
p = head;
while (p != NULL) {
printf("%d,%s ", p->score, p->ID);
p = p->next;
}
printf("\n");
}
// 释放链表所占内存空间
void freeList(struct grade *head) {
struct grade *p = head;
while (p != NULL) {
struct grade *node = p;
p = p->next;
free(node);
}
}
int main() {
struct grade *head = createList();
int n;
printf("请输入要插入结点的位置,在这个位置后面插入新结点:");
scanf("%d", &n);
insertNode(head, n);
freeList(head);
return 0;
}
```
运行示例:
```
输入学生成绩和ID:23,01 45,03 67,04 -1
创建的链表:23,01 45,03 67,04
请输入要插入结点的位置,在这个位置后面插入新结点:3
请输入要插入结点的成绩和ID: 78,02
插入后的链表:23,01 45,03 67,04 78,02
```