用C语言的链表实现学生管理系统

C语言学生管理系统,使用链表实现。它提供了添加、删除、打印学生信息的功能。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Student {
    int id;			//学生编号
    char name[20];	//姓名
    struct Student *next;
} Student;

// 添加学生的函数
void add_student(Student **head, int id, const char *name) {
    // 分配内存空间给新学生结构体
    Student *new_student = (Student *)malloc(sizeof(Student));
    // 设置新学生的id
    new_student->id = id;
    // 设置新学生的名字
    strcpy(new_student->name, name);
    // 将新学生的next指针指向当前的头结点
    new_student->next = *head;
    // 更新头结点为新添加的学生结构体
    *head = new_student;
}

// 删除学生的函数
void delete_student(Student **head, int id) {
    // 初始化current指针指向头结点,previous指针为空
    Student *current = *head, *previous = NULL;

    // 遍历链表,查找需要删除的学生结点
    while (current != NULL) {
        // 如果找到匹配的id
        if (current->id == id) {
            // 如果previous为NULL,说明需要删除的是头结点
            if (previous == NULL) {
                // 更新头结点为当前结点的下一个结点
                *head = current->next;
            } else {
                // 否则将previous结点的next指针指向当前结点的下一个结点,从而移除当前结点
                previous->next = current->next;
            }
            // 释放当前结点的内存空间
            free(current);
            return;
        }
        // 更新previous为当前结点,current为下一个结点,继续遍历
        previous = current;
        current = current->next;
    }
}

// 打印学生信息的函数
void print_students(Student *head) {
    // 初始化current指针指向头结点
    Student *current = head;
    // 打印标题
    printf("学生名单:\n");
    // 遍历链表,打印每个学生的信息
    while (current != NULL) {
        printf("ID: %d, Name: %s\n", current->id, current->name);
        // 更新current为下一个结点
        current = current->next;
    }
}

int main() {
    Student *head = NULL;

    add_student(&head, 1, "张三");
    add_student(&head, 2, "李四");
    add_student(&head, 3, "王五");

    print_students(head);

    delete_student(&head, 2);

    print_students(head);

    return 0;
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
C语言是一种非常流行的编程语言,它拥有强大的数据结构和操作能力,非常适合用来实现学生成绩管理系统。链表是一种常用的数据结构,可以动态地添加、删除和查找数据,非常适合存储学生成绩信息。 首先,我们需要定义一个链表结构体,用来存储学生成绩的信息。结构体包括学生姓名、学生学号和学生成绩等字段。 然后,我们可以定义一些操作链表的函数,例如添加学生成绩、删除学生成绩和查询学生成绩等。 添加学生成绩的函数可以接受用户输入的学生信息,并将其添加到链表中。首先创建一个新的节点,并将用户输入的学生信息存储到节点的字段中。然后将新节点插入到链表的末尾或指定的位置。 删除学生成绩的函数可以接受用户输入的学生学号,并在链表中查找该学生,然后将其删除。首先从链表的头节点开始遍历,找到要删除的节点,然后将其从链表中移除,并释放该节点的内存。 查询学生成绩的函数可以接受用户输入的学生学号,并在链表中查找该学生,并将学生的信息显示出来。首先从链表的头节点开始遍历,找到要查询的节点,然后将节点的字段信息显示给用户。 最后,我们可以编写一个主函数来接受用户的操作指令,并调用相应的函数来实现学生成绩管理系统。用户可以选择添加学生信息、删除学生信息、查询学生信息等操作。 以上就是用C语言链表实现学生成绩管理系统的简要过程。当然,在实际开发中还需要考虑异常情况的处理、数据的持久化存储等问题,希望能对你有所启发。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT大鸵鸟

你的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值