我需要了解以下问题:
给定一个链表
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
来搜索文件?
(编辑注:好吧,有了编辑过的问题,这更像是一个评论,而不是对问题的实际回答,但我还是把它留在这里…)
你应该使用联合而不是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;
}