动态大小的链接列表指针数组

时间:2013-04-21 15:24:45

标签: c arrays pointers struct

我正在试图弄清楚如何初始化一个指向链接列表的指针数组,这些链接列表具有基于用户输入的动态大小。

我有一个结构如下:

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 *);
};

我愿意下注,问题在于如何定义动态大小的链接列表指针数组,然后初始化它。有谁能为我提供一些帮助吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

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

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

然后你可以分配你想要的正确数量。