【发布时间】:2017-04-27 11:08:04
【问题描述】:
我有一个任务要求我使用链表来存储一些数据,但我只能使用<stdio.h>。
我正在考虑使用数组,但在到达数组末尾的情况下无法扩展数组(我在大约 15 分钟前从这里读到这是不可能的:How can I change the size of an array in C?)。
然后我想也许我写了malloc函数?但这对我来说很麻烦,因为我是 C 新手。
另一个猜测是考虑通过分配给函数中的变量而不是返回来创建新节点。我在想,如果我在函数中定义一个变量,它会在每次调用错误的函数时分配一个足够大小的新内存。
现在,我不知道该怎么办,我应该坚持允许使用<stdlib.h> 吗?或者有没有办法或者我应该只使用带有链表的数组?
【问题讨论】:
-
malloc不在stdio.h内。您可以通过拥有struct的数组并将数组索引用作链接来实现链接列表,如果没有链接,则使用-1。如果你想要一个动态的事件,你可以有另一个可用元素的链接列表。 -
您可以使用固定大小的数组作为内存源还是需要处理不确定的大小?如果您可以使用固定大小的数组,则可以从中分配列表节点。
-
如果你是初学者,你不需要编写自己的分配器(无论如何,它需要使用固定大小的数组来分配)。您确定需要在存储空间已满时对其进行扩展吗?
-
你想用链表管理什么样的数据?
-
您可以有一个固定大小的数组,其中的元素链接到一个“空闲”列表。当你想分配一个列表元素时,如果它是非空的,就从“空闲”列表中取出它。如果它为空,则打印错误并退出程序。除了你不能调用
exit,因为你只能使用stdio.h,所以你必须从你的main函数返回。
标签: c arrays linked-list malloc