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

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

简介

单链表是一种线性结构,由多个节点组成。每个节点包含两个域,一个是数据域,用于存储数据,另一个是指针域,用于指向下一个节点。

学生管理系统是一个常见的应用程序,可以用于记录和管理学生信息。C语言单链表可以用来实现学生管理系统,通过链表数据结构的操作,实现学生信息的增删改查等功能。

程序框架

  1. 定义学生结构体
typedef struct student
{
    int id;           // 学生编号
    char name[20];    // 学生姓名
    int score;        // 学生成绩
    struct student *next;  // 指向下一个学生的指针
} Student;
  1. 实现创建新节点的函数
Student *createNewStudent(int id, char *name, int score)
{
    Student *newStudent = (Student*) malloc(sizeof(Student));
    newStudent->id = id;
    strcpy(newStudent->name, name);
    newStudent->score = score;
    newStudent->next = NULL;
    return newStudent;
}
  1. 实现添加学生的函数
void addStudent(Student **head, Student *newStudent)
{
    if(*head == NULL) {
        *head = newStudent;
    }
    else {
        Student *p = *head;
        while(p->next != NULL) {
            p = p->next;
        }
        p->next = newStudent;
    }
}
  1. 实现删除学生的函数
void deleteStudent(Student **head, int id)
{
    if(*head == NULL) {
        printf("链表为空!\n");
    }
    else {
        Student *p = *head;
        Student *q = NULL;
        while(p != NULL && p->id != id) {
            q = p;
            p = p->next;
        }
        if(p == NULL) {
            printf("未找到该学生\n");
            return;
        }
        if(q == NULL) {
            *head = p->next;
        }
        else {
            q->next = p->next;
        }
        free(p);
    }
}
  1. 实现修改学生信息的函数
void changeStudent(Student *head, int id, char *name, int score)
{
    if(head == NULL) {
        printf("链表为空!\n");
    }
    else {
        Student *p = head;
        while(p != NULL && p->id != id) {
            p = p->next;
        }
        if(p == NULL) {
            printf("未找到该学生!\n");
            return;
        }
        strcpy(p->name, name);
        p->score = score;
        printf("修改成功!\n");
    }
}
  1. 实现查找学生的函数
void findStudent(Student *head, int id)
{
    if(head == NULL) {
        printf("链表为空!\n");
    }
    else {
        Student *p = head;
        while(p != NULL && p->id != id) {
            p = p->next;
        }
        if(p == NULL) {
            printf("未找到该学生!\n");
            return;
        }
        printf("学生姓名:%s 学生成绩:%d\n", p->name, p->score);
    }
}
  1. 实现显示所有学生信息的函数
void displayAllStudent(Student *head)
{
    if(head == NULL) {
        printf("链表为空!\n");
    }
    else {
        Student *p = head;
        printf("所有学生信息如下:\n");
        while(p != NULL) {
            printf("学生编号:%d 学生姓名:%s 学生成绩:%d\n", p->id, p->name, p->score);
            p = p->next;
        }
    }
}

示例说明

示例1:添加学生信息

int main()
{
    Student *head = NULL;
    Student *s1 = createNewStudent(1, "张三", 89);
    Student *s2 = createNewStudent(2, "李四", 92);
    addStudent(&head, s1);
    addStudent(&head, s2);
    displayAllStudent(head);
    return 0;
}

输出结果:

所有学生信息如下:
学生编号:1 学生姓名:张三 学生成绩:89
学生编号:2 学生姓名:李四 学生成绩:92

示例2:删除学生信息

int main()
{
    Student *head = NULL;
    Student *s1 = createNewStudent(1, "张三", 89);
    Student *s2 = createNewStudent(2, "李四", 92);
    addStudent(&head, s1);
    addStudent(&head, s2);
    deleteStudent(&head, 2);
    displayAllStudent(head);
    return 0;
}

输出结果:

所有学生信息如下:
学生编号:1 学生姓名:张三 学生成绩:89

以上就是C语言单链表实现学生管理系统的完整攻略。通过以上代码的实现,可以实现常见的学生信息管理功能,也可以自由扩展,增加其他功能。

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

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

相关文章

  • CURL的学习和应用(附多线程实现)

    CURL的学习和应用(附多线程实现) 什么是CURL CURL是一个开源的命令行工具,可以用于向服务器发送HTTP、HTTPS、FTP请求,并且支持POST、PUT、GET等方法。CURL的优势在于简单易用、功能强大、支持多种协议。除此之外,CURL还提供了非常强大的LIBCURL库,可以在各种语言中实现HTTP请求。 CURL的安装 CURL的安装非常简单…

    C 2023年5月22日
    00
  • json实现jsp分页实例介绍(附效果图)

    下面就来详细讲解一下“json实现jsp分页实例介绍(附效果图)”的完整攻略。 1. 基本介绍 这个示例主要是基于jsp和json技术实现的分页功能。通过jsp实现数据的展示以及分页的管理,通过json来实现前后台数据的交互,即ajax异步刷新数据,实现页面的无刷新分页。 2. 具体步骤 2.1 实现数据的获取和展示 首先,我们需要在jsp页面中实现数据的获…

    C 2023年5月23日
    00
  • C语言实现火车票管理系统

    C语言实现火车票管理系统攻略 1. 需求分析 在进行编码实现之前,首先需要进行需求分析。火车票管理系统主要需要实现以下功能: 添加火车班次信息 查询火车班次信息 订票 退票 查看订单信息 2. 系统设计 根据需求分析的结果,我们可以将整个系统划分成以下几个模块: 火车班次信息管理模块 火车票订单管理模块 2.1 火车班次信息管理模块 2.1.1 添加火车班次…

    C 2023年5月23日
    00
  • C++类结构体与json相互转换

    当我们面对需要将C++类与结构体转换成json数据的需求时,最常见的方法是使用第三方库,例如jsoncpp、rapidjson等。在这里,我将为大家介绍一种简单易用的方法。它结合了C++11的特性和STL容器,使得代码简洁易读,同时具备高效性能。 步骤一:定义C++类结构体 首先,我们需要定义一个C++类或者结构体,来描述我们要转换为json数据的对象。例如…

    C 2023年5月22日
    00
  • C++三色球问题描述与算法分析

    下面是详细讲解C++三色球问题的完整攻略: 问题描述 假设有n个球,其中有红、黄、蓝三种颜色的球,每种颜色至少有一个球。将这n个球排成一列,并记下它们的颜色序列。请问,有多少种不同的颜色序列方式? 算法分析 可以使用递归算法来解决这个问题。 我们可以把球分为两个部分,第一个和剩下的n-1个。那么就可以先求出剩下的n-1个球的颜色排序,然后将第一个球插入到所有…

    C 2023年5月22日
    00
  • C++如何用数组模拟链表

    C++可以用数组来模拟链表的数据结构,这种方法也被称为静态链表。下面是模拟链表的完整攻略: 1.创建一个数组,并初始化每个元素。数组中的每一项包括两个数据值:数据和指针。其中数据存储着当前节点的值,指针存储着下一个节点在数组中的索引值。 struct Node{ int value; //当前节点的值 int next; //下一个节点在数组中的索引值 }n…

    C 2023年5月23日
    00
  • C语言中如何进行排序和查找操作?

    C语言中进行排序和查找操作是非常常见和重要的操作,下面我将详细介绍排序和查找操作的常见方法和算法。 排序算法 冒泡排序 冒泡排序是一种简单的排序算法,它的基本思想是通过依次比较相邻的元素,将较大的元素后移,较小的元素前移,达到排序的目的。冒泡排序时间复杂度为O(n^2),是一种效率较低的算法。 示例代码: void bubble_sort(int array…

    C 2023年4月27日
    00
  • 深入理解C语言 static、extern与指针函数

    概述 在C语言中,static和extern是两个关键字,它们的作用主要与变量和函数的作用域和链接有关。而指针函数则是C语言中比较重要的一个概念,用于返回指针类型数据的函数。本文将从这三个方面进行详细讲解。 static关键字 static是一个非常常用的关键字,在C语言中主要有两个作用: 改变变量的作用域。当一个变量被定义为static时,它的作用域仅限于…

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