我试图弄清楚如何初始化指向链表的指针的数组,该链表具有基于用户输入的动态大小。

我有一个结构如下:

struct HashTable {
int tableSize;
int (*getKey)(void *);
char *  (*toString)(void *);
void (*freeHashObject)(void *);
Boolean (*compare)(void *, void *);
ListPtr table;
};


根据用户输入,表变量应该包含动态数量的链表。您可以假设n是一个有效的整数,并且createHashObject可以按预期工作。

HashTablePtr table;
HashObjectPtr job;
table = createHashTable(n, getKey, toString, freeHashObject, compare);

for (i=0; i<n; i++)
{
    job = createHashObject(firstInput);
    HashInsert(table, job);
}


我相信问题在于createHashTable如下。

HashTablePtr createHashTable(int size, int (*getKey)(void *),
char * (*toString)(void *), void (*freeHashObject)(void *),
Boolean (*compare)(void *, void *))
{
HashTablePtr h = (HashTablePtr)malloc(sizeof(HashTable));
//dont worry that i dont do things with the function pointers
h -> table = (ListPtr)malloc(sizeof(List)*size);
int i;
for (i = 0; i < size; i++)
{
    h -> table[i] = createList(getKey, toString, freeHashObject);
}
}


上面的代码似乎无法正确初始化所有链接列表。这是createList函数和List结构的代码。

ListPtr createList(int(*getKey)(void *),
               char * (*toString)(void *),
               void (*freeHashObject)(void *))
{
ListPtr list;
list = (ListPtr) malloc(sizeof(List));
list->size = 0;
list->head = NULL;
list->tail = NULL;
list->getKey = getKey;
list->toString = toString;
list->freeObject = freeHashObject;
return list;
}

struct list {
int size;
NodePtr head;
NodePtr tail;
int (*getKey)(void *);
char *  (*toString)(void *);
void (*freeObject)(void *);
};


我愿意打赌,问题出在我如何定义链接列表的指针的动态大小数组然后对其进行初始化。有人可以给我一些帮助吗?

谢谢。

最佳答案

在您的HashTable结构中,更改table定义以将其声明为指针,如下所示

struct HashTable {
    ...
    ListPtr *table;
};


然后,您可以分配想要完成的任意数量。

关于c - 动态大小的指向链接列表的指针数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16132785/

10-14 09:18