我需要了解以下问题:
给出一个链表
typedef struct
{
int i;
void * next;
flag fg;
}node;
其中flag
是枚举
typedef enum
{
in_file,
in_memory
}flag;
其中in_file
表示列表节点位于文件中,in_memory
列表节点不在文件中(next
指向字符串,该字符串是文件名)
给定一个函数node* loadList(char* file_name)
,它从文件中读取列表并返回第一个列表节点。
编写一个函数char* exists(node* list,int value,int* isInList)
,检查列表中是否存在value
,并返回找到该值的文件名的指针。
文件包含多个列表。
从文件中读取列表时,重写指针next
并从现有列表中键入flag
。
问题:如何重写指针next
并从列表中输入flag
?
如何使用枚举类型flag
来搜索文件?
答案 0 :(得分:1)
(编辑注释:好的,对于编辑过的问题,这更像是评论而不是实际回答问题,但无论如何我都会留在这里......)
你应该使用union而不是void指针:
struct list_node
{
int i;
union {
struct list_node *node;
const char *filename;
} next;
flag fg;
} ;
然后你会有像
这样的代码switch(node->fg)
case in_memory:
....node->next.node->.....;
break;
case in_file:
....node->next.filename....;
break;
}