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;
接下来,通过代码对学生链表进行操作,以展示学生信息的增删查改。
-
增加学生
新建一个学生节点,将其加入到链表中。
C
Student *s4 = (Student*)malloc(sizeof(Student));
strcpy(s4->name, "赵六");
strcpy(s4->sex, "女");
add_student(head, s4);此时,学生链表新增加了一个名为“赵六”的学生。
-
删除学生
根据学生姓名查找链表中的对应学生节点,并删除该节点。
C
delete_student(head, "李四");此时,学生链表中已经没有名为“李四”的学生。
-
查找学生
根据学生姓名查找链表中的对应学生节点,并返回该节点的指针。
C
Student *p = search_student(head, "张三");
if (p != NULL) {
printf("姓名:%s,性别:%s\n", p->name, p->sex);
}此时,程序输出了名为“张三”的学生信息。
-
修改学生
根据学生姓名查找链表中的对应学生节点,并将其性别信息改为新的值。
C
modify_student(head, "张三", "女");此时,名为“张三”的学生的性别信息被修改为“女”。
至此,C语言链表实现学生管理系统的完整攻略就介绍完毕了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言链表实现学生管理系统 - Python技术站