如何在c中创建链表节点的动态数组?

时间:2012-04-18 06:56:02

标签: c

基本上,应该在用户输入上初始化数组。如果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

准备面试......所以你可以说上班!

3 个答案:

答案 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了解其工作原理。