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

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

链表是一种数据结构,它具有很好的插入和删除操作,并且可以对元素进行动态调整。学生管理系统是常用的一个应用场景。此处将用C语言来实现一个简单的学生管理系统,采用链表实现。

数据结构

在本例中,每个学生表示为一个结构体包含姓名和性别两个成员变量。由于要使用链表实现,每个学生还需要有一个指针成员变量,表示下一个学生节点。

代码如下:

typedef struct Student {
    char name[20];
    char sex[5];
    struct Student *next;
} Student;

链表操作

链表操作包括对学生信息的增删查改四个基本操作。

增加学生信息

新建一个学生节点,将其加入到链表中。这里以在链表末尾增加一个学生作为示例。

void add_student(Student *head, Student *new_student) {
    Student *p = head;
    while (p->next != NULL) {
        p = p->next;
    }
    p->next = new_student;
    new_student->next = NULL;
}

删除学生信息

根据学生姓名查找链表中的对应学生节点,并删除该节点。

void delete_student(Student *head, char *name) {
    Student *p = head->next, *q = head;
    while (p != NULL) {
        if (strcmp(p->name, name) == 0) {
            q->next = p->next;
            free(p);
            break;
        }
        q = p;
        p = p->next;
    }
}

查找学生信息

根据学生姓名查找链表中的对应学生节点,并返回该节点的指针。

Student* search_student(Student *head, char *name) {
    Student *p = head->next;
    while (p != NULL) {
        if (strcmp(p->name, name) == 0) {
            return p;
        }
        p = p->next;
    }
    return NULL;
}

修改学生信息

根据学生姓名查找链表中的对应学生节点,并将其性别信息改为新的值。

void modify_student(Student *head, char *name, char *new_sex) {
    Student *p = search_student(head, name);
    if (p != NULL) {
        strcpy(p->sex, new_sex);
    }
}

示例

假设现在有一个学生链表,包含3个学生信息。其中第一个学生信息为:

姓名:张三

性别:男

链表的头节点为head,代码如下:

Student *head, *s1, *s2, *s3;
head = (Student*)malloc(sizeof(Student));
s1 = (Student*)malloc(sizeof(Student));
s2 = (Student*)malloc(sizeof(Student));
s3 = (Student*)malloc(sizeof(Student));
strcpy(s1->name, "张三");
strcpy(s1->sex, "男");
strcpy(s2->name, "李四");
strcpy(s2->sex, "女");
strcpy(s3->name, "王五");
strcpy(s3->sex, "男");
head->next = s1;
s1->next = s2;
s2->next = s3;
s3->next = NULL;

接下来,通过代码对学生链表进行操作,以展示学生信息的增删查改。

  1. 增加学生

    新建一个学生节点,将其加入到链表中。

    C
    Student *s4 = (Student*)malloc(sizeof(Student));
    strcpy(s4->name, "赵六");
    strcpy(s4->sex, "女");
    add_student(head, s4);

    此时,学生链表新增加了一个名为“赵六”的学生。

  2. 删除学生

    根据学生姓名查找链表中的对应学生节点,并删除该节点。

    C
    delete_student(head, "李四");

    此时,学生链表中已经没有名为“李四”的学生。

  3. 查找学生

    根据学生姓名查找链表中的对应学生节点,并返回该节点的指针。

    C
    Student *p = search_student(head, "张三");
    if (p != NULL) {
    printf("姓名:%s,性别:%s\n", p->name, p->sex);
    }

    此时,程序输出了名为“张三”的学生信息。

  4. 修改学生

    根据学生姓名查找链表中的对应学生节点,并将其性别信息改为新的值。

    C
    modify_student(head, "张三", "女");

    此时,名为“张三”的学生的性别信息被修改为“女”。

至此,C语言链表实现学生管理系统的完整攻略就介绍完毕了。

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

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

相关文章

  • C语言程序中递归算法的使用实例教程

    下面我将详细介绍如何撰写一篇完整的C语言程序中递归算法的使用实例教程。 题目 首先,我们需要确定一篇教程的题目。可以选择一个简单明了的标题,如“C语言程序中递归算法的使用实例教程”。 前言 在前言中,我们可以介绍递归算法在计算机科学中的应用以及本教程的目的和主要内容。 递归算法概述 在这一部分中,我们可以介绍递归算法的概念和基本原理,包括递归定义、递归特征、…

    C 2023年5月23日
    00
  • C++之类和对象课后习题简单实例

    针对“C++之类和对象课后习题简单实例”的完整攻略,可以从以下几个方面进行讲解: 一、题目理解 在做习题前,首先需要充分理解题意,这里应该明确以下几个点: 题目要求实现的是什么功能?如何输入数据,如何输出结果? 题目给出的限制条件是什么?需要注意哪些细节问题? 题目解答需要用到哪些知识点和技巧? 比如有如下一道题目: 假设有一个 Point 类,表示平面上的…

    C 2023年5月22日
    00
  • 程序员都不知道C语言中的这些小细节

    当我们学习C语言时,很容易掌握其基本语法,包括变量定义、赋值、循环、逻辑运算等操作。然而,在实际开发中,可能会涉及到一些C语言中的小细节,这些细节甚至有可能被一些经验丰富的程序员所忽略。接下来,我们详细讲解“程序员都不知道C语言中的这些小细节”的攻略。 1. 整型溢出 C语言中整型变量通常分为有符号整型和无符号整型。有符号整型可以表示负数,而无符号整型只能表…

    C 2023年5月23日
    00
  • win11怎么分盘?Win11电脑C磁盘分盘方法

    下面是“win11怎么分盘?Win11电脑C磁盘分盘方法”的完整攻略。 准备工作 在进行C盘分区之前,请确保您已经对电脑进行了备份,并且您有管理员权限以进行分区更改。此外,您还需要具备一些分区工具,例如Disk Management、DiskGenius、EaseUS Partition Master等。 方法一:使用Disk Management分区工具 …

    C 2023年5月23日
    00
  • VS2019中CMake项目如何指定c++语言标准

    对于VS2019中的CMake项目,指定C++语言标准分为以下两种情况: 针对某个特定的C++源文件指定语言标准 针对整个项目指定C++语言标准 以下是详细的操作步骤: 针对某个特定的C++源文件指定语言标准: (1) 在该C++源文件中添加以下语句: #SET(CMAKE_CXX_STANDARD 17) 以上语句的含义就是将这个C++源文件设为使用C++…

    C 2023年5月23日
    00
  • 融会贯通C++智能指针教程

    下面我来详细讲解融会贯通C++智能指针教程的完整攻略。 一、什么是C++智能指针 C++智能指针(Smart Pointer)是一个封装了RAII(Resource Acquisition Is Initialization,资源获取即初始化)和指针语义的类模板,它会在对象生命结束时自动释放所持有的资源。智能指针可以有效地解决代码中因忘记释放资源而导致的内存…

    C 2023年5月22日
    00
  • 详解C++编程中断言static_assert的使用

    详解C++编程中断言static_assert的使用 在C++中,当我们需要在编译期进行类型检查或常量计算时,可以使用static_assert。具体来说,static_assert是一个语言特性,用于在编译期进行断言判断,如果判断条件为false,则程序会在编译期抛出一个编译错误,阻止程序的继续编译。 用法 static_assert可以用于两种类型的判断…

    C 2023年5月23日
    00
  • C语言实现点菜系统

    C语言实现点菜系统 本攻略将介绍如何使用C语言实现一个简单的点菜系统。在这个系统中,顾客可以浏览菜单,选择自己的菜品并计算价格。系统则会输出选择的菜品及总价。 基本思路 定义菜单。菜单的定义可以采用数组的方式实现,每个元素代表一道菜品,包括名称和价格。 展示菜单。通过循环遍历数组,输出所有菜品名称及价格。 用户选择菜品。通过让用户输入菜品的编号,实现选择菜品…

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