C语言异质链表存储老师与学生资料
时间: 2024-09-15 19:13:05 浏览: 36
在C语言中,异质链表(Heterogeneous Linked List)是一种数据结构,它可以用于存储不同类型的数据元素在一个统一的链表节点中。如果我们要存储教师和学生的资料,我们可以设计一个包含通用字段(如ID、姓名等)以及每个特定类型的额外字段(如教师的专业、学生所在的班级)的链表结构。
例如:
```c
typedef struct Node {
void* data; // 存储任意类型的数据指针
int type; // 标记节点类型,比如用整数1表示教师,2表示学生
struct Node* next; // 指向下一个节点的指针
} Node;
typedef struct TeacherNode {
int teacher_id;
char* teacher_name;
// 其他教师相关的字段...
} TeacherNode, *Teacher;
typedef struct StudentNode {
int student_id;
char* student_name;
int class_id;
// 其他学生相关的字段...
} StudentNode, *Student;
// 创建教师节点
Teacher createTeacher(int id, char* name) {
TeacherNode* node = (TeacherNode*)malloc(sizeof(TeacherNode));
node->data = (void*)&node->teacher_id;
node->type = 1;
// 设置其他教师信息...
return (Teacher)node;
}
// 创建学生节点
Student createStudent(int id, char* name, int class_id) {
StudentNode* node = (StudentNode*)malloc(sizeof(StudentNode));
node->data = (void*)&node->student_id;
node->type = 2;
// 设置其他学生信息...
return (Student)node;
}
// 插入和遍历链表操作
void insert(Node** head, Node* newNode) {
// ...
}
void traverse(Node* head) {
while (head != NULL) {
if (head->type == 1) { // 教师节点
// 处理教师信息
} else if (head->type == 2) { // 学生节点
// 处理学生信息
}
head = head->next;
}
}
```
阅读全文