C语言实现学生信息管理系统 - 链表操作示例
#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n// 定义学生结构体\ntypedef struct student {\n char name[20];\n int id;\n int age;\n struct student* next;\n} Student;\n\n// 创建新节点\nStudent* createNode(char name[], int id, int age) {\n Student* newNode = (Student*)malloc(sizeof(Student));\n strcpy(newNode->name, name);\n newNode->id = id;\n newNode->age = age;\n newNode->next = NULL;\n return newNode;\n}\n\n// 在链表尾部插入新节点\nvoid insertNode(Student** head, char name[], int id, int age) {\n Student* newNode = createNode(name, id, age);\n if (head == NULL) {\n head = newNode;\n } else {\n Student current = head;\n while (current->next != NULL) {\n current = current->next;\n }\n current->next = newNode;\n }\n printf("学生信息插入成功!\n");\n}\n\n// 根据学号删除节点\nvoid deleteNode(Student head, int id) {\n if (head == NULL) {\n printf("链表为空,无法删除学生信息!\n");\n return;\n }\n if ((head)->id == id) {\n Student temp = head;\n head = (head)->next;\n free(temp);\n printf("学生信息删除成功!\n");\n return;\n }\n Student current = head;\n while (current->next != NULL && current->next->id != id) {\n current = current->next;\n }\n if (current->next == NULL) {\n printf("未找到学号为%d的学生信息!\n", id);\n } else {\n Student temp = current->next;\n current->next = current->next->next;\n free(temp);\n printf("学生信息删除成功!\n");\n }\n}\n\n// 根据学号查找节点\nvoid searchNode(Student head, int id) {\n if (head == NULL) {\n printf("链表为空,无法查找学生信息!\n");\n return;\n }\n Student current = head;\n while (current != NULL && current->id != id) {\n current = current->next;\n }\n if (current == NULL) {\n printf("未找到学号为%d的学生信息!\n", id);\n } else {\n printf("学生姓名:%s\n", current->name);\n printf("学生学号:%d\n", current->id);\n printf("学生年龄:%d\n", current->age);\n }\n}\n\n// 修改节点信息\nvoid updateNode(Student head, int id, char name[], int age) {\n if (head == NULL) {\n printf("链表为空,无法修改学生信息!\n");\n return;\n }\n Student* current = head;\n while (current != NULL && current->id != id) {\n current = current->next;\n }\n if (current == NULL) {\n printf("未找到学号为%d的学生信息!\n", id);\n } else {\n strcpy(current->name, name);\n current->age = age;\n printf("学生信息修改成功!\n");\n }\n}\n\n// 打印链表的所有节点信息\nvoid printList(Student* head) {\n if (head == NULL) {\n printf("链表为空,无法打印学生信息!\n");\n return;\n }\n Student* current = head;\n while (current != NULL) {\n printf("学生姓名:%s\n", current->name);\n printf("学生学号:%d\n", current->id);\n printf("学生年龄:%d\n", current->age);\n printf("\n");\n current = current->next;\n }\n}\n\nint main() {\n Student* head = NULL; // 链表头节点\n int choice;\n while (1) {\n printf("学生信息管理系统\n");\n printf("1. 插入学生信息\n");\n printf("2. 删除学生信息\n");\n printf("3. 查找学生信息\n");\n printf("4. 修改学生信息\n");\n printf("5. 打印所有学生信息\n");\n printf("6. 退出系统\n");\n printf("请输入您的选择:");\n scanf("%d", &choice);\n\n switch (choice) {\n case 1: {\n char name[20];\n int id, age;\n printf("请输入学生姓名:");\n scanf("%s", name);\n printf("请输入学生学号:");\n scanf("%d", &id);\n printf("请输入学生年龄:");\n scanf("%d", &age);\n insertNode(&head, name, id, age);\n break;\n }\n case 2: {\n int id;\n printf("请输入要删除的学生学号:");\n scanf("%d", &id);\n deleteNode(&head, id);\n break;\n }\n case 3: {\n int id;\n printf("请输入要查找的学生学号:");\n scanf("%d", &id);\n searchNode(head, id);\n break;\n }\n case 4: {\n int id, age;\n char name[20];\n printf("请输入要修改的学生学号:");\n scanf("%d", &id);\n printf("请输入修改后的学生姓名:");\n scanf("%s", name);\n printf("请输入修改后的学生年龄:");\n scanf("%d", &age);\n updateNode(head, id, name, age);\n break;\n }\n case 5:\n printList(head);\n break;\n case 6:\n printf("退出系统!\n");\n exit(0);\n default:\n printf("输入有误,请重新输入!\n");\n }\n }\n\n return 0;\n
原文地址: https://www.cveoy.top/t/topic/p7BO 著作权归作者所有。请勿转载和采集!