怎么把两个不同类型的结构体用链表连接到一起
时间: 2023-08-01 22:06:16 浏览: 47
可以使用一个包含两个结构体的联合体,并在结构体中添加一个指向下一个节点的指针。这样,就可以将不同类型的结构体通过共享同一个指针来连接到一起。
例如,假设我们有两个结构体A和B,我们想要将它们连接到一起:
```c
struct A {
int a1;
char a2;
};
struct B {
float b1;
double b2;
};
union Node {
struct A a;
struct B b;
};
struct LinkedList {
union Node data;
struct LinkedList* next;
};
```
在这个例子中,我们创建了一个包含两个不同结构体的联合体`Node`,并在`LinkedList`结构体中添加了一个指向下一个节点的指针`next`。因此,我们可以将不同类型的结构体连接到一起:
```c
struct LinkedList* head = NULL;
// 创建第一个节点
struct LinkedList* node1 = (struct LinkedList*)malloc(sizeof(struct LinkedList));
node1->data.a.a1 = 10;
node1->data.a.a2 = 'a';
node1->next = NULL;
// 创建第二个节点
struct LinkedList* node2 = (struct LinkedList*)malloc(sizeof(struct LinkedList));
node2->data.b.b1 = 3.14;
node2->data.b.b2 = 2.71828;
node2->next = NULL;
// 将第一个节点与第二个节点连接起来
node1->next = node2;
head = node1;
// 遍历链表并打印节点数据
struct LinkedList* current = head;
while (current != NULL) {
if (current->data.a.a2 == 'a')
printf("%d %c\n", current->data.a.a1, current->data.a.a2);
else
printf("%f %lf\n", current->data.b.b1, current->data.b.b2);
current = current->next;
}
```
这样就可以将两个不同类型的结构体用链表连接到一起了。