C语言实现学生信息管理系统:链表操作详解
C语言实现学生信息管理系统:链表操作详解
这篇文章将指导你使用C语言和链表数据结构创建一个学生信息管理系统。
1. 定义数据结构
首先,我们需要定义存储学生信息和链表节点的数据结构:c#include <stdio.h>#include <stdlib.h>#include <string.h>
typedef struct { char gender[100]; char number[100]; char no[100]; char address[100]; char name[100];} student;
typedef struct node { student data; struct node* next;} node, *linklist;
这里 student 结构体用于存储单个学生的性别、电话号码、学号、家庭住址和姓名信息,而 node 结构体表示链表中的一个节点,包含一个 student 数据和指向下一个节点的指针。
2. 创建链表
接下来,我们需要创建一个函数来初始化链表:clinklist createList() { linklist L = (linklist)malloc(sizeof(node)); L->next = NULL; linklist p, q; p = L; int n; printf('请输入学生数量:'); scanf('%d', &n); for (int i = 0; i < n; i++) { q = (linklist)malloc(sizeof(node)); printf('请输入第%d个学生的学号:', i + 1); scanf('%s', q->data.no); printf('请输入姓名:'); scanf('%s', q->data.name); printf('请输入性别:'); scanf('%s', q->data.gender); printf('请输入联系电话:'); scanf('%s', q->data.number); printf('请输入家庭住址:'); scanf('%s', q->data.address); p->next = q; q->next = NULL; p = q; } printf('链表创建成功 '); printf('—————————————— '); return L;}
该函数首先创建头节点,然后根据用户输入的学生数量动态分配内存创建新节点,并逐个添加学生信息,最终返回链表的头指针。
3. 删除节点
为了实现删除学生信息的功能,我们需要编写一个函数来删除指定学号对应的节点:cvoid deleteNode(linklist L) { linklist p, q; char s[100]; printf('请输入要删除的学生学号:'); scanf('%s', s); p = L->next; q = L; while (p && strcmp(p->data.no, s) != 0) { q = p; p = p->next; } if (p) { q->next = p->next; free(p); printf('删除成功 '); printf('—————————————— '); } else { printf('删除失败,请确认学号是否输入正确 '); printf('—————————————— '); }}
该函数遍历链表,找到匹配学号的节点并将其删除,同时释放该节点占用的内存空间。
4. 查找节点
查找学生信息可以通过学号进行:cvoid findNode(linklist L) { linklist p; char fd[100]; printf('请输入要查找的学生学号:'); scanf('%s', fd); p = L->next; while (p && strcmp(p->data.no, fd) != 0) { p = p->next; } if (p) { printf('学号:%s 姓名:%s 性别:%s 联系电话:%s 家庭住址:%s ', p->data.no, p->data.name, p->data.gender, p->data.number, p->data.address); printf('查找成功 '); printf('—————————————— '); } else { printf('查找失败,请确定学号是否输入正确 '); printf('—————————————— '); }}
该函数遍历链表,找到匹配学号的节点并打印该学生的所有信息。
5. 添加节点
添加学生信息可以通过在链表末尾添加节点实现:cvoid addNode(linklist L) { linklist p, q; p = L; while (p->next) { p = p->next; } q = (linklist)malloc(sizeof(node)); printf('请输入新增学生的学号:'); scanf('%s', q->data.no); printf('请输入姓名:'); scanf('%s', q->data.name); printf('请输入性别:'); scanf('%s', q->data.gender); printf('请输入联系电话:'); scanf('%s', q->data.number); printf('请输入家庭住址:'); scanf('%s', q->data.address); q->next = NULL; p->next = q; printf('增加成功 '); printf('—————————————— ');}
该函数首先找到链表的最后一个节点,然后创建新节点,将新学生的信息存储在节点中,并将该节点链接到链表末尾。
6. 释放链表内存
最后,我们需要在程序结束时释放链表所占用的内存空间:cvoid freeList(linklist L) { linklist p, q; p = L; while (p) { q = p; p = p->next; free(q); }}
7. 主函数
主函数用于组织程序的流程:cint main() { linklist L; int n; printf('请输入学生信息以创建链表: '); L = createList(); printf('创建成功,请选择你需要进行的操作: '); printf('1.退出 '); printf('2.注销学生信息 '); printf('3.查找学生信息 '); printf('4.增加学生信息 '); while (1) { scanf('%d', &n); if (n == 1) { printf('退出成功 '); printf('—————————————— '); break; } else if (n == 2) { deleteNode(L); } else if (n == 3) { findNode(L); } else if (n == 4) { addNode(L); } else { printf('无效的操作,请重新输入 '); } } freeList(L); return 0;}
主函数首先调用 createList 函数创建链表,然后根据用户的选择调用相应的函数进行操作,最后调用 freeList 函数释放链表内存。
总结
这篇文章提供了一个使用C语言和链表实现简单学生信息管理系统的示例。你可以根据自己的需求修改和扩展这个系统,例如添加修改学生信息的功能等。
原文地址: https://www.cveoy.top/t/topic/SF7 著作权归作者所有。请勿转载和采集!