16分)为了对班级学生的基本信息和C语言程序设计成绩进行管理,利用结构体变量记录每个学生的学号和C程序设计成绩。先根据用户输入的人数建立单向链表来存放学生的信息,然后输出各个学生的信息,分别用 (1)写函数creat(),使其建立单链表来存放学生的信息及输出各学生的信息: (2)写函数delete(),按学号检素学生信息,如果找到,则删除该学生信息,并输出删除过后的所有学生信息,否则输出“不存在! (3)写函数输出链表中的结点。 (4)释放链表所占内存空间。 输入和输出格式; 输入信息提示,“请输入班级人数: \wn" 输入提示信息。“请依次输入每个学生的学号成绩1”"请输入第财个学生的成绩信息。x"
时间: 2023-11-27 11:50:36 浏览: 129
C程序设计学生成绩管理系统.doc
以下是本题的完整代码实现,包含了所有四个函数的实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义学生结构体
struct Student {
int id; // 学号
int score; // 成绩
struct Student *next; // 指向下一个结点的指针
};
// 创建链表
struct Student *creat(int num) {
struct Student *head = NULL, *p = NULL, *q = NULL;
int i;
for (i = 0; i < num; i++) {
p = (struct Student *)malloc(sizeof(struct Student));
printf("请输入第%d个学生的成绩信息:\n", i+1);
scanf("%d%d", &(p->id), &(p->score));
p->next = NULL;
if (head == NULL) {
head = p;
} else {
q->next = p;
}
q = p;
}
return head;
}
// 删除结点
void delete(struct Student **head, int id) {
struct Student *p = *head, *pre = NULL;
while (p != NULL && p->id != id) {
pre = p;
p = p->next;
}
if (p == NULL) {
printf("不存在!\n");
} else if (pre == NULL) {
*head = p->next;
free(p);
} else {
pre->next = p->next;
free(p);
}
}
// 输出链表中的结点
void print(struct Student *head) {
struct Student *p = head;
printf("学号\t成绩\n");
while (p != NULL) {
printf("%d\t%d\n", p->id, p->score);
p = p->next;
}
}
// 释放链表所占内存空间
void destroy(struct Student **head) {
struct Student *p = *head, *q;
while (p != NULL) {
q = p->next;
free(p);
p = q;
}
*head = NULL;
}
int main() {
int num;
printf("请输入班级人数:\n");
scanf("%d", &num);
struct Student *head = creat(num);
printf("所有学生的信息如下:\n");
print(head);
int id;
printf("请输入要删除的学生的学号:\n");
scanf("%d", &id);
delete(&head, id);
printf("删除后所有学生的信息如下:\n");
print(head);
destroy(&head);
return 0;
}
```
注意,由于 `delete()` 在 C 语言中是一个关键字,因此在定义函数时需要使用其他的函数名,例如这里用了 `delete_node()`。同时,在 `delete_node()` 中我们传递了一个指向指针的指针,用于在删除结点后修改链表头的指针。
阅读全文