C语言使用链表实现学生信息管理系统

C语言使用链表实现学生信息管理系统

概述

本文将介绍如何使用链表实现学生信息管理系统。该系统能够录入学生信息,查询学生信息,修改学生信息,删除学生信息,并且能够进行数据保存和读取。在实现过程中,我们将使用C语言来编写整个系统。

实现步骤

1. 定义结构体

首先,我们需要定义一个结构体,用来保存学生的各种信息,如下所示:

struct Student {
    int id;
    char name[20];
    int age;
    float score;
};

2. 节点的定义

接下来,我们需要定义链表节点的结构体,每个节点中需要保存一个学生的信息和指向下一个节点的指针,如下所示:

struct Node {
    struct Student data;
    struct Node *next;
};

3. 链表的各种操作函数

3.1 初始化链表

初始化链表,我们需要定义一个头结点,这个头结点是不存储任何学生信息的,只是用来方便我们操作链表。代码如下:

struct Node *head;

void init() {
    head = (struct Node *) malloc(sizeof(struct Node));
    head->next = NULL;
}

3.2 链表中添加节点

在链表中添加一个节点,需要先创建一个节点,然后将这个节点插入到链表的尾部。代码如下:

void insert(struct Student stu) {
    struct Node *node = (struct Node *) malloc(sizeof(struct Node));
    node->data = stu;
    node->next = NULL;

    struct Node *p = head;
    while (p->next != NULL) {
        p = p->next;
    }
    p->next = node;
}

3.3 链表中删除节点

在链表中删除一个节点,需要先找到要删除的节点的前一个节点,然后将前一个节点的指针指向要删除节点的下一个节点,最后将要删除的节点释放掉。代码如下:

void delete(int id) {
    struct Node *p = head;
    while (p->next != NULL) {
        if (p->next->data.id == id) {
            struct Node *q = p->next;
            p->next = q->next;
            free(q);
            return;
        }
        p = p->next;
    }
}

3.4 链表中查询节点

链表中查询某个节点,需要遍历整个链表,判断每个节点的id是否和要查询的id相等,如果相等就返回这个节点的指针,否则继续遍历。代码如下:

struct Node *find(int id) {
    struct Node *p = head;
    while (p->next != NULL) {
        if (p->next->data.id == id) {
            return p->next;
        }
        p = p->next;
    }
    return NULL;
}

3.5 链表中修改节点

链表中修改某个节点,需要先找到要修改的节点,然后直接修改这个节点里的学生信息即可。代码如下:

void update(int id, struct Student stu) {
    struct Node *node = find(id);
    if (node != NULL) {
        node->data = stu;
    }
}

3.6 链表中遍历节点

遍历链表中的所有节点,需要从头结点开始遍历,依次输出每个节点中的学生信息。代码如下:

void display() {
    struct Node *p = head->next;
    while (p != NULL) {
        printf("id=%d, name=%s, age=%d, score=%.2f\n", p->data.id, p->data.name, p->data.age, p->data.score);
        p = p->next;
    }
}

4. 使用示例

下面我们来看两个使用示例。

4.1 添加学生信息

struct Student stu1 = {1, "Tom", 18, 89.5};
struct Student stu2 = {2, "Jerry", 20, 94.2};

// 初始化链表
init();

// 添加节点
insert(stu1);
insert(stu2);

// 遍历节点
printf("插入两个节点后的链表:\n");
display();

输出结果如下:

插入两个节点后的链表:
id=1, name=Tom, age=18, score=89.50
id=2, name=Jerry, age=20, score=94.20

4.2 删除学生信息

// 删除节点
delete(2);

// 遍历节点
printf("删除一个节点后的链表:\n");
display();

输出结果如下:

删除一个节点后的链表:
id=1, name=Tom, age=18, score=89.50

总结

本文介绍了如何使用链表来实现学生信息管理系统。通过本文的学习,相信大家已经掌握了C语言中使用链表的基本操作,能够灵活的运用链表来解决实际问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言使用链表实现学生信息管理系统 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C 共用体

    C语言共用体(Union)完整使用攻略 共用体(Union)是C语言中一种特殊的数据类型,与结构体(Struct)类似,也是一种复合类型。共用体允许不同的数据类型在相同的内存空间里互相转换使用,这意味着在同一时间只能保存相同的数据类型,但可以在不同的时间存储不同的数据类型。 创建共用体 共用体和结构体的方式非常相似,可以使用关键字union来定义共用体,例如…

    C 2023年5月10日
    00
  • Swift如何调用Objective-C的可变参数函数详解

    那么首先我们需要了解的是Objective-C中的可变参数函数的使用方式和Swift对其的调用方式。 在Objective-C中,可变参数函数通常使用va_list和va_start、va_arg、va_end等宏来进行参数的处理。其中 va_start宏接受可变参数函数的参数列表以及可变参数的最后一个非变长参数,在获取可变参数时,需要使用 va_arg宏进…

    C 2023年5月23日
    00
  • C/C++ 原生API实现线程池的方法

    C/C++原生API实现线程池,可以通过以下步骤来实现: 第一步:定义线程池结构体 线程池结构体的定义通常包含以下几个成员: 线程池中线程的数量:通过这个成员可以控制线程池中线程的数量 任务队列:用来存储要执行的任务 线程池是否正在运行:通过这个成员可以控制是否继续执行任务 定义如下: typedef struct threadpool { int thre…

    C 2023年5月22日
    00
  • C语言实现爆炸展开的扫雷详解

    C语言实现爆炸展开的扫雷详解 什么是扫雷游戏? 扫雷是一款非常经典的单机游戏,也是Windows操作系统自带的经典小游戏之一。在游戏中,玩家需要打开一个地图,为了避免触雷,需要根据数字提示来判断周围的方块是否是地雷,最终将地图上的所有地雷都标记出来。 怎么实现爆炸展开? “爆炸展开”是扫雷游戏中非常重要的一步,也是难度比较大的一部分。如果一个方块周围没有地雷…

    C 2023年5月23日
    00
  • C++实现特殊矩阵的压缩存储算法

    C++实现特殊矩阵的压缩存储算法 算法介绍 在实际应用中,矩阵的很多元素都是0,这些0元素占据了大量的存储空间。为了节省存储空间,可以采用特殊矩阵的压缩存储算法。特殊矩阵指的是对角线以下或以上的元素都为0。压缩存储算法就是将特殊矩阵转化成一个一维数组进行存储。 将特殊矩阵M压缩成一维数组A的过程如下: 从左到右,从上到下,依次取出特殊矩阵M中的每一个非零元素…

    C 2023年5月22日
    00
  • C/C++如何实现两矩阵相乘之模拟法

    C/C++实现两矩阵相乘,模拟法是一种常见且直观的方法。该方法的基本思想是:根据矩阵乘法公式,将一个矩阵转置,再对两个矩阵进行逐个元素的相乘,最终得到一个新的矩阵。以下是详细的步骤和示例说明: 1. 创建两个矩阵 需要创建两个矩阵,以便进行相乘的操作。可以采用二维数组的形式来表示一个矩阵,如下所示: int matrix1[3][3] = { {1, 2, …

    C 2023年5月23日
    00
  • Vue项目报错:Uncaught SyntaxError: Unexpected token ‘<’的解决方法

    对于Vue项目中出现的“Uncaught SyntaxError: Unexpected token ‘<’”错误,一般是由于代码中使用了不符合Vue模板语法规则的字符或语法造成的。解决这种问题的方法如下: 第一步:排查代码中可能存在的错误。 1.1 首先打开Vue组件文件或模板文件,依次检查文件中使用的HTML标签、Vue模板指令以及自定义Vue组件是否符…

    C 2023年5月23日
    00
  • C语言深入讲解语句与选择结构的使用

    C语言深入讲解语句与选择结构的使用 1. 语句的基础知识 在使用C语言编程时,我们使用语句来实现程序的功能。语句是一个完整的操作指令,每一个语句都执行一定的任务。 C语言的基本语句分为以下几种: 1.1 赋值语句 赋值语句可以将一个值赋给变量,语法如下: variable = expression; 其中,variable 表示变量名,expression …

    C 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部