【发布时间】:2014-07-04 09:32:28
【问题描述】:
这是我在课堂上做的作业的数据结构。我应该实现一个包含一串链表的哈希集。这些单独的链表中的每一个都包含一个 int。我的列表是通用的,如果可行的话,使用 (void* data) 像这样:
typedef struct NodeStruct {
void *data;
struct NodeStruct* next;
struct NodeStruct* prev;
} NodeStruct;
// Rename NodeStruct* as NodePtr
typedef NodeStruct* NodePtr;
typedef struct ListStruct {
int elementType;
NodePtr first;
NodePtr last;
NodePtr current;
} ListStruct;
// ListHndl is just a ListStruct* renamed.
第一个问题:现在,我正在使用memcpy(list->data, data, list->elementType)。
我想知道..直接存储可以吗,比如list->data = data?
这是我的哈希集结构:
typedef struct HashStruct {
int size;
int load;
ListHndl *chain; //An array of Linked Lists.
} HashStruct;
typedef HashStruct* HashHandle
HashHandle new_hashset(int size) {
HashHandle tempHash = malloc (sizeof (HashStruct));
assert (tempHash != NULL);
tempHash->size = size;
tempHash->load = 0;
tempHash->chain = malloc (sizeof (ListHndl) * size);
assert(tempHash->chain != NULL);
for (int i = 0; i < size; i++) {
tempHash->chain[i] = newList(sizeof(char*));
tempHash->chain[i]->data = malloc(sizeof (ListHndl)); // Error here
}
return tempHash;
}
这是我遇到的错误。
hash.c: In function ‘new_hashset’:
hash.c:28:27: error: dereferencing pointer to incomplete type
tempHash->chain[i]->data = malloc(sizeof (ListHndl));
^
第二个问题:我不确定我应该如何为这些链表分配内存,这可能就是我收到此错误的原因。
我是否正确地实现了这个数据结构?如果需要更多信息,请告诉我。谢谢!
【问题讨论】:
-
[风格提示] 去掉 typedefs;他们唯一的目的就是迷惑你。
标签: c generics hash linked-list void-pointers