gpt4 book ai didi

c - 同一节点中的不同结构链表 C

转载 作者:太空宇宙 更新时间:2023-11-04 00:48:29 26 4
gpt4 key购买 nike

我的作业有点困难,想知道是否有人能指出我正确的道路。

我想创建一个支持使用不同节点的链表,因为我需要使用不同的数据集。

目前我正在使用三个结构:

struct equipment_data {
char EquipID[4+1]; /* 4 Max */
char EquipName[31+1]; /* 31 Max */
unsigned TotalNumber;
};

struct member_data {
unsigned MemberID;
char LastName[31+1]; /* 31 Max */
char FirstName[31+1]; /* 31 Max */
};

struct loan_data {
unsigned MemberID;
char EquipID[4+1]; /* 4 Max */
unsigned Number;
};

我需要以某种方式在同一个节点中使用它。

struct ets {
struct node *equipment_data;
struct node *member_data;
struct node *loan_data;
unsigned equip_count;
unsigned member_count;
unsigned loan_count;
};

struct node {
void *data;
struct node *next;
};

看来我需要创建一个 ADT 链表。能否请你帮忙?谢谢!

最佳答案

我会为您需要支持的类型创建结构,然后在链表节点中创建一个带有类型指示符的 union :

typedef struct { int a, b, c;    } Type1;
typedef struct { char buf[80]; } Type2;
typedef struct { int a; float b; } Type3;

typedef union {
Type1 t1,
Type2 t2,
Type3 t3;
} Anytype;

typedef struct node {
int thistype; // 1 for type1, 2 for type2 etc.
Anytype data;
struct node *next;
} Listnode;

只需确保在每个 Listnode 中正确设置 thistype

Listnode *node = malloc(sizeof(Listnode));
node->thistype = 1; // example: Type1, the 3 ints
node->t1.a = 1;
node->t1.b = 2;
node->t1.c = 3;
node->next = someothernode;

您可以使用开关来访问数据:

Listnode *node;
switch (node->thistype) {
case 1:
// do stuff with node->t1.a, node->t1.b, node->t1.c
break
case 2:
// do stuff with node->t2.buf
break;
case 3:
// do stuff with node->t3.a, node.t3.b
break
}

关于c - 同一节点中的不同结构链表 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28107867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com