gpt4 book ai didi

c - 动态大小的指向链表的指针数组

转载 作者:行者123 更新时间:2023-11-30 17:52:30 24 4
gpt4 key购买 nike

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

我有一个结构如下:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com