基本上,应该在用户输入上初始化数组。如果input = 3
,则表示此数组可以分别在索引0,1,2
中存储一个链接列表(因此共有3个列表)
int input = 3;
list* array[n]//not allowed as n is not constant, also not in heap so can't pass it across functions
list* array[] = (list*) malloc(sizeof(list)*input)//compiler error
准备面试......所以你可以说上班!
答案 0 :(得分:1)
链接列表数组可以是头节点数组(假设标准链表实现)或指向列表的指针数组。在任何一种情况下,您似乎面临的问题是如何动态分配数组。
在堆上动态分配数组的通用语法是
type * array = calloc(number_of_elements, sizeof(type))
因此,纠正代码中的编译错误
int input = 3;
list ** array = calloc(input, sizeof(list*));
这是你在找什么?
答案 1 :(得分:0)
应为list* array = malloc(sizeof(list) * input)
,malloc
返回新分配的内存位置的基址。您可以将其用作数组,即您可以访问array[0]..array[input - 1]
。
答案 2 :(得分:0)
(单个)链表通常是具有指向下一个结构的指针的结构。此模式可以轻松添加,删除和插入该列表中的内容,并且仍可保持整个数据使用的灵活性并在运行时进行管理。
您的情况中的链接列表将如下所示
struct List
{
// contents of the list
List* Pointer_to_next_list;
};
然后,您可以添加用于跟踪每个列表的功能。我建议阅读Wikipedia::Linked List了解其工作原理。