2012-04-18 66 views
-1

基本上,数组应该在用户输入时初始化。如果input = 3,这意味着该阵列可以索引0,1,2一个链表分别存储(因此总共3所列出)如何在c中创建链接列表节点的动态数组?

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

问题和代码相互矛盾;你想动态分配一组列表还是一组列表节点? – Christoffer 2012-04-18 10:19:47

+0

链表的数组....所以数组[0]有listA和数组[1]指向listB。换句话说,而不是一个数组数组,我想要数组链表。但数组的大小必须根据用户的输入决定 – 2012-04-18 17:02:02

回答

0

它应该是list* array = malloc(sizeof(list) * input),malloc返回新分配的内存位置的基地址。您可以将其用作阵列,即您可以访问array[0]..array[input - 1]

+0

但是这不是说数组实际上只是一个链接列表,分配了这么多的内存吗?我将如何访问它索引明智? – 2012-04-18 07:00:53

+0

哦好吧..我试试这个代码! – 2012-04-18 07:01:32

0

(单个)链接列表通常是一个带有指向下一个结构的指针的结构。这种模式可以很容易地从列表中添加,删除和插入东西,并且仍然保持整个数据使用的灵活性并在运行时进行管理。

在您的情况的链接列表看起来像这样

struct List 
{ 
// contents of the list 
List* Pointer_to_next_list; 
}; 

然后你就可以添加功能,保持每个列表的轨道。我建议阅读Wikipedia::Linked List了解它的工作原理。

1

链表的阵列可以是任一头部节点的数组(假设标准链表实现)或指针数组来列表。无论哪种情况,您似乎都面临的问题是如何动态分配数组。

用于在堆上动态分配阵列的通用语法是

type * array = calloc(number_of_elements, sizeof(type)) 

修正从而在你的代码的编译错误将

int input = 3; 
list ** array = calloc(input, sizeof(list*)); 

这是你在找什么?