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日

相关文章

  • PHP的Json中文处理解决方案

    以下是 PHP 的 Json 中文处理解决方案的完整攻略。 1. 背景介绍 在 PHP 中,我们经常需要将数据以 JSON 的格式进行传输或存储。然而,如果 JSON 中含有中文字符,那么就会出现编码问题,导致中文字符被转义为 Unicode 码,给使用和阅读带来不便。 2. 解决方案 我们可以采用 PHP 内置的 addslashes() 函数或使用 JS…

    C 2023年5月23日
    00
  • python中报错”json.decoder.JSONDecodeError: Expecting value:”的解决

    当我们使用Python解析JSON数据时,如果JSON格式错误,就会出现”json.decoder.JSONDecodeError: Expecting value:”错误提示。下面是这个错误的详细解决方式: 解决方法1:检查JSON格式正确性 首先,我们需要检查JSON数据的格式是否正确。可以使用在线工具,在线工具可以帮助我们验证JSON格式是否正确。如果…

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

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

    C 2023年5月23日
    00
  • 关于go语言载入json可能遇到的一个坑

    当使用 Go 语言读取 JSON 文件并解析时,需要注意的是,JSON 对象中的属性是无序的。因此,如果不使用正确的数据结构,可能会导致 JSON 数据解析失败而出现错误。 具体来说,使用 Go 语言解析 JSON 数据时,应该使用结构体而非 map 进行数据的解析。这是因为 map 在解析 JSON 对象时,会自动将属性名转换为字符串类型,而这会导致属性顺…

    C 2023年5月23日
    00
  • Python使用ctypes调用C/C++的方法

    下面是Python使用ctypes调用C/C++的方法的完整攻略。 什么是ctypes ctypes是Python中一个重要的模块,它允许Python调用本地动态链接库中的C函数。使用ctypes,Python程序可以调用C语言编写的底层函数,加速程序的运行速度。 ctypes使用方法 1.导入ctypes模块 import ctypes 2.加载动态链接库…

    C 2023年5月23日
    00
  • 电脑蓝屏代码0xc0000225怎么解决? 电脑0xc0000225错误的解决办法

    电脑蓝屏代码0xc0000225怎么解决 在使用电脑的过程中,可能会遇到蓝屏错误代码0xc0000225,导致电脑无法正常使用。本文将为您介绍该错误的原因,并提供解决该错误的相关方法。 错误原因 出现0xc0000225错误意味着启动程序无法正确加载winload.efi文件。通常情况下,这种问题可能是由以下原因引起的: 应用项损坏 启动数据损坏 硬件故障(…

    C 2023年5月23日
    00
  • iOS中多线程的经典崩溃总结大全

    很高兴听到您对iOS多线程崩溃总结的攻略感兴趣。下面我将为您提供详细的讲解。 引言 在iOS开发过程中,多线程是常见的技术,它允许我们运行多个任务并发执行,提升了应用程序的性能。但是多线程编程难度大,容易造成各种崩溃。在iOS中,多线程崩溃主要有以下几种: EXC_BAD_ACCESS错误:当访问不属于该线程的内存地址时会引发EXC_BAD_ACCESS崩溃…

    C 2023年5月22日
    00
  • Python实现字典按key或者value进行排序操作示例【sorted】

    下面是Python实现字典按key或value进行排序的攻略: 1. 字典按key排序 如果你想按dict的key进行排序,可以使用Python的内置方法sorted()实现。下面是一个示例代码: d = {‘banana’: 3, ‘apple’: 4, ‘pear’: 1, ‘orange’: 2} sorted_dict = sorted(d.item…

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