0

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

我有一个结构如下:

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

我敢打赌,问题在于我如何定义指向链表的动态大小的指针数组,然后对其进行初始化。谁能给我一些帮助?

谢谢你。

4

1 回答 1

0

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

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

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

于 2013-04-21T15:36:56.543 回答