C语言链表实现学生信息管理系统
{"title":"C语言链表实现学生信息管理系统","description":"本文介绍了使用C语言链表实现学生信息管理系统的完整代码和运行结果,包含初始化、插入、输出、查找、删除等功能。","keywords":"C语言, 链表, 学生信息管理系统, 单链表, 链式结构, 数据结构, 代码, 运行结果, 初始化, 插入, 输出, 查找, 删除","content":"#include "stdio.h"\n#include "stdlib.h"\n\n// 定义学生信息结构体\ntypedef struct Student {\n int id;\n char name[20];\n int age;\n char major[20];\n struct Student* next;\n} Student;\n\n// 初始化链表\nStudent* initList() {\n Student* head = (Student*)malloc(sizeof(Student));\n head->next = NULL;\n return head;\n}\n\n// 插入学生信息\nvoid insert(Student* head, int id, char* name, int age, char* major) {\n Student* newStudent = (Student*)malloc(sizeof(Student));\n newStudent->id = id;\n strcpy(newStudent->name, name);\n newStudent->age = age;\n strcpy(newStudent->major, major);\n newStudent->next = NULL;\n\n Student* p = head;\n while (p->next != NULL) {\n p = p->next;\n }\n p->next = newStudent;\n}\n\n// 输出第五个位置的学生信息\nvoid printFifthStudent(Student* head) {\n Student* p = head->next;\n int count = 0;\n while (p != NULL && count < 5) {\n p = p->next;\n count++;\n }\n if (p != NULL) {\n printf("第五个位置的学生信息:\n");\n printf("学号:%d\n", p->id);\n printf("姓名:%s\n", p->name);\n printf("年龄:%d\n", p->age);\n printf("专业:%s\n", p->major);\n } else {\n printf("第五个位置的学生信息不存在。\n");\n }\n}\n\n// 查找第7个结点的直接前驱和后继\nvoid findPreAndSuc(Student* head) {\n Student* p = head->next;\n int count = 0;\n while (p != NULL && count < 6) {\n p = p->next;\n count++;\n }\n if (p != NULL) {\n printf("第7个结点的直接前驱:\n");\n printf("学号:%d\n", p->id);\n printf("姓名:%s\n", p->name);\n printf("年龄:%d\n", p->age);\n printf("专业:%s\n", p->major);\n\n printf("第7个结点的直接后继:\n");\n printf("学号:%d\n", p->next->id);\n printf("姓名:%s\n", p->next->name);\n printf("年龄:%d\n", p->next->age);\n printf("专业:%s\n", p->next->major);\n } else {\n printf("第7个结点不存在。\n");\n }\n}\n\n// 在第7个节点后插入学生信息\nvoid insertAfter7(Student* head, int id, char* name, int age, char* major) {\n Student* newStudent = (Student*)malloc(sizeof(Student));\n newStudent->id = id;\n strcpy(newStudent->name, name);\n newStudent->age = age;\n strcpy(newStudent->major, major);\n newStudent->next = NULL;\n\n Student* p = head->next;\n int count = 0;\n while (p != NULL && count < 6) {\n p = p->next;\n count++;\n }\n if (p != NULL) {\n newStudent->next = p->next;\n p->next = newStudent;\n } else {\n printf("第7个结点不存在,无法插入。\n");\n }\n}\n\n// 删除年龄最大者学生基本信息并完成输出\nvoid deleteMaxAgeStudent(Student* head) {\n Student* p = head->next;\n Student* maxAgePre = NULL;\n Student* maxAge = NULL;\n int max = -1;\n\n while (p != NULL && p->next != NULL) {\n if (p->next->age > max) {\n max = p->next->age;\n maxAgePre = p;\n maxAge = p->next;\n }\n p = p->next;\n }\n\n if (maxAge != NULL) {\n maxAgePre->next = maxAge->next;\n printf("已删除年龄最大者学生基本信息:\n");\n printf("学号:%d\n", maxAge->id);\n printf("姓名:%s\n", maxAge->name);\n printf("年龄:%d\n", maxAge->age);\n printf("专业:%s\n", maxAge->major);\n free(maxAge);\n } else {\n printf("无学生信息可删除。\n");\n }\n}\n\n// 打印学生信息\nvoid printStudents(Student* head) {\n Student* p = head->next;\n printf("学号\t姓名\t年龄\t专业\n");\n while (p != NULL) {\n printf("%d\t%s\t%d\t%s\n", p->id, p->name, p->age, p->major);\n p = p->next;\n }\n}\n\n// 释放链表内存\nvoid freeList(Student* head) {\n Student* p = head;\n while (p != NULL) {\n Student* temp = p;\n p = p->next;\n free(temp);\n }\n}\n\nint main() {\n Student* head = initList();\n\n // 插入学生信息\n insert(head, 2021190001, "赵青", 19, "智科");\n insert(head, 2021190002, "李华", 18, "大数据");\n insert(head, 2021190003, "黎明", 20, "智科");\n insert(head, 2021190004, "向丽", 17, "空信");\n insert(head, 2021190005, "杨晨", 18, "物联网");\n insert(head, 2021190006, "周强", 18, "空信");\n insert(head, 2021119007, "刘帅", 22, "智科");\n insert(head, 2021119009, "李荣", 18, "大数据");\n insert(head, 2021119010, "伍柏", 18, "大数据");\n insert(head, 2021119011, "朴树", 19, "物联网");\n insert(head, 2021119012, "杨颖", 9, "智科");\n\n // 输出第五个位置的学生信息\n printFifthStudent(head);\n\n // 查找第7个结点的直接前驱和后继\n findPreAndSuc(head);\n\n // 在第7个节点后插入学生信息\n insertAfter7(head, 2021119008, "王源", 19, "智科");\n\n // 删除年龄最大者学生基本信息并完成输出\n deleteMaxAgeStudent(head);\n\n // 打印学生信息\n printStudents(head);\n\n // 释放链表内存\n freeList(head);\n\n return 0;\n}\n"}
原文地址: https://www.cveoy.top/t/topic/poKM 著作权归作者所有。请勿转载和采集!