c语言寝室管理系统链表
时间: 2023-09-02 08:14:24 浏览: 52
链表是一种常见的数据结构,可以用来实现寝室管理系统。下面是一个简单的C语言链表实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义一个学生结构体
typedef struct student {
char name[20]; // 姓名
int num; // 学号
char gender[5]; // 性别
int age; // 年龄
char dorm[10]; // 寝室号
struct student *next; // 指向下一个学生结构体的指针
} Student;
// 初始化链表
Student* init() {
Student *head = (Student*)malloc(sizeof(Student)); // 创建头结点
head->next = NULL; // 头结点指针域置空
return head;
}
// 添加学生
Student* add(Student *head, char *name, int num, char *gender, int age, char *dorm) {
Student *p = (Student*)malloc(sizeof(Student)); // 创建新结点
strcpy(p->name, name);
p->num = num;
strcpy(p->gender, gender);
p->age = age;
strcpy(p->dorm, dorm);
p->next = head->next; // 新结点指向头结点的下一个结点
head->next = p; // 头结点指向新结点
return head;
}
// 删除学生
Student* del(Student *head, char *name) {
Student *p = head->next; // 指向第一个结点
Student *pre = head; // 指向头结点
while(p) {
if(strcmp(p->name, name) == 0) { // 找到要删除的结点
pre->next = p->next; // 前驱结点指向后继结点
free(p); // 释放空间
return head;
}
pre = p; // 前驱结点指向当前结点
p = p->next; // 当前结点指向下一个结点
}
printf("未找到该学生!\n");
return head;
}
// 修改学生信息
Student* modify(Student *head, char *name, int num, char *gender, int age, char *dorm) {
Student *p = head->next;
while(p) {
if(strcmp(p->name, name) == 0) { // 找到要修改的结点
p->num = num;
strcpy(p->gender, gender);
p->age = age;
strcpy(p->dorm, dorm);
return head;
}
p = p->next;
}
printf("未找到该学生!\n");
return head;
}
// 查找学生
void search(Student *head, char *name) {
Student *p = head->next;
while(p) {
if(strcmp(p->name, name) == 0) {
printf("姓名:%s 学号:%d 性别:%s 年龄:%d 寝室号:%s\n", p->name, p->num, p->gender, p->age, p->dorm);
return;
}
p = p->next;
}
printf("未找到该学生!\n");
}
// 输出学生信息
void print(Student *head) {
Student *p = head->next;
while(p) {
printf("姓名:%s 学号:%d 性别:%s 年龄:%d 寝室号:%s\n", p->name, p->num, p->gender, p->age, p->dorm);
p = p->next;
}
}
// 释放链表空间
void destory(Student *head) {
Student *p = head;
while(p) {
Student *q = p->next;
free(p);
p = q;
}
}
int main() {
Student *head = init(); // 初始化链表
// 添加学生
head = add(head, "张三", 1001, "男", 18, "A101");
head = add(head, "李四", 1002, "女", 19, "A102");
head = add(head, "王五", 1003, "男", 20, "A103");
head = add(head, "赵六", 1004, "女", 21, "A104");
// 输出学生信息
printf("所有学生信息如下:\n");
print(head);
// 删除学生
head = del(head, "李四");
printf("删除李四后所有学生信息如下:\n");
print(head);
// 修改学生信息
head = modify(head, "张三", 1005, "女", 19, "B101");
printf("修改张三后所有学生信息如下:\n");
print(head);
// 查找学生
printf("查找赵六的信息:\n");
search(head, "赵六");
// 释放链表空间
destory(head);
return 0;
}
```
运行上述代码,可以看到输出的学生信息以及删除、修改、查找操作的结果。