【发布时间】:2016-11-03 16:04:16
【问题描述】:
我正在尝试在 C 中创建一个具有多个数据字段的通用链表
typedef struct listNode {
void *data1;
void *data2;
void *data3;
struct listNode *next;
} listNode;
我需要从格式中读取文件
name YOB country
john 1995 USA
Sam 1990 USA
Tim 1889 AUS
所以我的计划是让列表的每个节点在每一行上存储信息(我已经注意查找每列的变量类型,所以我可以键入转换指针)。所以例如在第 2 行
typedef struct listNode {
void *data1; //becomes a string that is john
void *data2; //becomes a int that is 1995
void *data3; // becomes a string that is USA
struct listNode *next;
} listNode;
我的问题首先是,列表的每个元素甚至可能或只能包含一种变量,因为当我搜索通用列表时,示例只有一个无效数据*
我的第二个问题是我不知道文件会有多少列;有没有办法动态设置数据字段的数量?
//FILE HAS 5 COLUMNS
typedef struct listNode {
void *data1;
void *data2;
void *data3;
void *data4;
void *data5;
struct listNode *next;
} listNode;
//FILE HAS 2 COLUMNS
typedef struct listNode {
void *data1;
void *data2;
struct listNode *next;
} listNode;
【问题讨论】:
-
整个文件中的列数是否保持不变?
-
@Saurav Sahu 是的
-
对于动态结构形成的答案是否定的,因为它的数据类型必须在编译时知道:Checkout stackoverflow.com/questions/6187908/…
-
@Saurav Sahu 哦,好吧,如果我知道有多少列(比如第一个示例中的 3 列),列表可以包含不同类型的变量,对吗?
-
通常,您会在列表中使用单个
void *data;,但您的三元组列表将指向具有三个字段的结构。因此:struct listNode { void *data; struct listNode *next; };和struct person { char name[20]; int yob; char country[20]; };或附近,而管理的void *值将变相为struct person *。相同的列表代码可以处理单元素、双元素、三元素、四元素、五元素......