C 不使用结构作为链表创建地图
我必须为C语言中的映射创建一个结构,它包含一个char*键和void*值,这两个值在内部存储在一起。我必须为包含链接指针、键字符串和值的链表单元格分配内存,而不是将链表作为外部结构 键和值数据必须直接存储在单元格中,并且单元格必须在运行时构建。我得到了这个的开始,它将涉及一个结构,如:C 不使用结构作为链表创建地图,c,C,我必须为C语言中的映射创建一个结构,它包含一个char*键和void*值,这两个值在内部存储在一起。我必须为包含链接指针、键字符串和值的链表单元格分配内存,而不是将链表作为外部结构 键和值数据必须直接存储在单元格中,并且单元格必须在运行时构建。我得到了这个的开始,它将涉及一个结构,如: struct example { int count_of_list_elem; void *list; } 但我不知道如何才能使用另一个结构来形成链表 我是否需要在结构本身中创建一些单元格
struct example {
int count_of_list_elem;
void *list;
}
但我不知道如何才能使用另一个结构来形成链表
我是否需要在结构本身中创建一些单元格,为其分配内存并向其传递三个值?我只是不确定它会如何工作
编辑:我需要使用void*数组。这是在C中处理动态大小结构的标准方法:
struct example {
struct example *next; /* linked list */
int count_of_list_elem;
char data[1];
}
struct example *bigone = malloc (sizeof (struct example) + 10000);
if (!bigone)
// error
bigone -> next = NULL;
bigone -> count_of_list_elem = 10000;
memcpy (bigone -> data, <data source>);
您可以在定义结构之前声明它,以便在结构本身中引用它:
typedef struct tagMyStruct* my_struct_pointer;
typedef struct tagMyStruct
{
char* KeyPtr;
void* ValuePtr;
my_struct_pointer NextPtr;
} my_struct;
static my_struct_pointer _listHeadPtr = NULL;
my_struct_pointer AddNewCellToList(char* keyPtr, void* valuePtr)
{
my_struct_pointer newCellPtr = malloc(sizeof(my_struct));
newCellPtr->KeyPtr = keyPtr;
newCellPtr->ValuePtr = valuePtr;
newCellPtr->NextPtr = _listHeadPtr;
_listHeadPtr = newCellPtr;
return(newCellPtr);
}
在调用AddNewCellToList之前,您需要为键和值指定适当的存储空间。您可以在自己的定义中引用结构类型:
struct example {
int count_of_list_elem;
void *list;
struct example *next;
}
整个链表上的句柄只是指向第一个元素的指针:
struct example *head;
在创建新节点以初始化其下一个指向NULL的指针以指示其后面最初没有元素时,您需要小心。如果您能演示如何使用void*,那会有所帮助。@marchon:我不明白为什么需要这样做。无效指针不能直接使用:它必须转换为实际类型。第一个结构是某个映射,它应该存储单元格的链接列表。我不能引用主结构中的任何结构。@marchon请解释一下原因好吗?您可以使用指向已声明但未定义的结构的指针,如上面的代码所示,而无需求助于void*。例如:typedef struct tagMyCell*单元格指针;在cell.h头文件中,以及在cell.c文件中私有保存的struct tagMyCell{}的实现中,以及映射结构中使用的cell_指针类型中,不知道它指向的内存的实际内容。