当前位置:首页 考试管理 考试成绩 如何建立学生成绩链表

如何建立学生成绩链表

发布时间:2025-05-06 12:58:09

建立学生成绩链表需要定义一个结构体来存储学生信息,并通过链表操作实现数据的增删改查功能。以下是具体步骤和示例代码:

一、定义链表节点结构体

如何建立学生成绩链表

每个节点包含学号、成绩数组及指向下一个节点的指针。例如:

```c

typedef struct Student {

int number; // 学号

float score; // 3门课成绩

struct Student *next; // 指向下一个节点的指针

} Student;

```

二、创建链表函数

初始化链表:

定义头指针并初始化为`NULL`

插入节点:

在链表头部或指定位置插入新节点

删除节点:

根据学号或位置删除节点

如何建立学生成绩链表

遍历链表:

按学号或成绩排序后输出所有节点信息

三、示例代码实现

以下是一个完整的示例代码,包含链表创建、插入、删除、排序和输出功能:

```c

include

include

// 定义链表节点结构体

typedef struct Student {

int number; // 学号

float score; // 3门课成绩

struct Student *next; // 指向下一个节点的指针

} Student;

// 创建链表函数

Student* create() {

Student *head = NULL, *p = NULL;

int n;

printf("输入学生人数(输入0结束):");

scanf("%d", &n);

while (n != 0) {

p = (Student *)malloc(sizeof(Student));

if (p == NULL) {

printf("内存分配失败

");

exit(1);

}

printf("输入学号:");

scanf("%d", &p->number);

printf("输入3门课成绩:");

for (int i = 0; i < 3; i++) {

scanf("%f", &p->score[i]);

}

p->next = head;

head = p;

printf("是否继续输入?(1是,0结束):");

scanf("%d", &n);

}

return head;

}

如何建立学生成绩链表

// 按成绩排序链表(冒泡排序)

void sort(Student *head) {

if (head == NULL || head->next == NULL) return;

Student *p = head, *q = NULL, *temp;

do {

q = p->next;

p->next = NULL;

temp = q->next;

while (temp != NULL) {

if (temp->score > q->score) {

p->next = temp;

q->next = temp->next;

temp->next = q;

} else {

p = p->next;

}

temp = temp->next;

}

} while (p != NULL);

}

// 输出链表信息

void print(Student *head) {

Student *p = head;

printf("学号t语文t数学t英语t平均分

");

while (p != NULL) {

printf("%dt%.2ft%.2ft%.2ft%.2f

", p->number, p->score, p->score, p->score, (p->score + p->score + p->score) / 3);

p = p->next;

}

}

// 删除指定学号的节点

void delete(Student head, int number) {

Student *p = *head, *prev = NULL;

while (p != NULL && p->number != number) {

prev = p;

p = p->next;

}

if (p == NULL) return;

if (prev == NULL) {

*head = p->next;

} else {

prev->next = p->next;

}

free(p);

}

// 主函数

int main() {

Student *head = create();

printf("学生成绩链表已建立

");

sort(head);

print(head);

int choice, number;

while (1) {

printf("

学生成绩管理系统

1. 添加学生

2. 删除学生

3. 输出所有学生

4. 退出

");

scanf("%d", &choice);

switch (choice) {

case 1:

printf("输入学号:");

scanf("%d", &number);

delete(&head, number);

break;

case 2:

printf("输入学号:");

scanf("%

温馨提示:
本文【如何建立学生成绩链表】由作者 做最好的自己 提供。 该文观点仅代表作者本人, 学习笔 信息发布平台,仅提供信息存储空间服务, 若存在侵权问题,请及时联系管理员或作者进行删除。
本站内容仅供参考,本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
Copyright © All Right Reserved
粤ICP备15053566号-4