c语言编码 用链表实现对学生成绩进行存储、插入及显示功能,学生包括ID和score属性。 结构体类型定义如下: struct grade { int score; char ID[6]; struct grade *next; }; (1)写函数创建单向链表并存储学生成绩信息,输入ID和score按逗号隔开,先输入score后输入ID,当score<0时链表创建完成,并输出创建后的链表信息。 (2)写函数实现在第n个结点后面插入一个新结点,并输出插入新结点后的链表信息。 (3)写函数释放链表所占内存空间。 输入提示:"输入学生成绩和ID:\n" 输入格式: "%d,%s" 输出提示:"创建的链表:\n" 输出格式:"%d,%s\n" 输入提示:"请输入要插入结点的成绩和ID:\n" 输入格式:"%d,%s" 输入提示:"请输入要插入结点的位置,在这个位置后面插入新结点:\n" 输入格式:%d (提示:插入的位置可能是0,1,...n. 如果要插入位置是其他位置,则输出提示: "插入的节点不存在!") 输出提示:"插入后的链表:\n" 输出格式:"%d,%s\n"
时间: 2023-07-07 17:37:47 浏览: 105
以下是C语言代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct grade {
int score;
char ID[6];
struct grade *next;
};
struct grade *create_list();
void insert_node(struct grade *head, int n);
void free_list(struct grade *head);
void print_list(struct grade *head);
int main() {
struct grade *head = NULL;
int n;
// 创建链表
head = create_list();
// 打印链表
printf("创建的链表:\n");
print_list(head);
// 插入结点
printf("请输入要插入结点的成绩和ID:\n");
scanf("%d,%s", &head->score, head->ID);
printf("请输入要插入结点的位置,在这个位置后面插入新结点:\n");
scanf("%d", &n);
insert_node(head, n);
// 打印链表
printf("插入后的链表:\n");
print_list(head);
// 释放链表
free_list(head);
return 0;
}
struct grade *create_list() {
struct grade *head = NULL, *p = NULL;
int score;
char ID[6];
printf("输入学生成绩和ID:\n");
scanf("%d,%s", &score, ID);
while (score >= 0) {
struct grade *new_node = (struct grade *) malloc(sizeof(struct grade));
new_node->score = score;
strcpy(new_node->ID, ID);
new_node->next = NULL;
if (head == NULL) {
head = new_node;
p = head;
} else {
p->next = new_node;
p = new_node;
}
scanf("%d,%s", &score, ID);
}
return head;
}
void insert_node(struct grade *head, int n) {
struct grade *p = head;
int i = 0;
while (i < n && p != NULL) {
p = p->next;
i++;
}
if (p == NULL) {
printf("插入的节点不存在!\n");
return;
}
struct grade *new_node = (struct grade *) malloc(sizeof(struct grade));
printf("请输入要插入结点的成绩和ID:\n");
scanf("%d,%s", &new_node->score, new_node->ID);
new_node->next = p->next;
p->next = new_node;
}
void free_list(struct grade *head) {
struct grade *p = head;
while (p != NULL) {
struct grade *tmp = p;
p = p->next;
free(tmp);
}
}
void print_list(struct grade *head) {
struct grade *p = head;
while (p != NULL) {
printf("%d,%s\n", p->score, p->ID);
p = p->next;
}
}
```
注意事项:
- 在输入成绩和ID时,必须按照“成绩,ID”的格式输入,中间用逗号隔开,否则会导致程序错误。
- 在插入结点时,如果要插入位置非法,会输出提示“插入的节点不存在!”。
阅读全文