学生宿舍管理系统用线性表顺序表及多种查找方式实现具体数据结构
时间: 2024-01-10 15:04:00 浏览: 88
数据结构实验报告--宿舍查询系统.doc
学生宿舍管理系统可以使用线性表(顺序表或链表)来实现。其中,每个节点可以存储一个学生的信息(如学号、姓名、性别、入住时间、床位号等)。下面是使用顺序表实现的代码示例:
```c
#define MAXSIZE 100 // 定义顺序表的最大长度
typedef struct {
char id[20]; // 学号
char name[20]; // 姓名
char gender[5]; // 性别
char checkin_time[20]; // 入住时间
int bed_number; // 床位号
} Student;
typedef struct {
Student data[MAXSIZE]; // 存储学生信息的数组
int length; // 当前存储的学生数量
} SeqList;
// 初始化顺序表
void init(SeqList *L) {
L->length = 0;
}
// 在顺序表末尾插入一个学生节点
void insert(SeqList *L, Student s) {
if (L->length >= MAXSIZE) {
printf("Error: The list is full!\n");
return;
}
L->data[L->length] = s;
L->length++;
}
// 根据学号查找学生信息
int search_by_id(SeqList L, char* id) {
for (int i = 0; i < L.length; i++) {
if (strcmp(L.data[i].id, id) == 0) {
return i;
}
}
return -1; // 未找到
}
// 根据床位号查找学生信息
int search_by_bed_number(SeqList L, int bed_number) {
for (int i = 0; i < L.length; i++) {
if (L.data[i].bed_number == bed_number) {
return i;
}
}
return -1; // 未找到
}
// 根据姓名查找学生信息(模糊匹配)
int search_by_name(SeqList L, char* name) {
for (int i = 0; i < L.length; i++) {
if (strstr(L.data[i].name, name) != NULL) {
return i;
}
}
return -1; // 未找到
}
// 根据性别查找学生信息
int search_by_gender(SeqList L, char* gender) {
for (int i = 0; i < L.length; i++) {
if (strcmp(L.data[i].gender, gender) == 0) {
return i;
}
}
return -1; // 未找到
}
```
使用链表实现的代码也类似,只需要修改节点的结构体定义和插入操作即可。此外,还可以根据不同的查找需求,实现不同的查找算法,如顺序查找、二分查找、哈希查找等。
阅读全文