使用数组实现链表 - 优点&缺点

时间:2012-05-07 06:39:02

标签: data-structures linked-list

我知道如何使用数组实现链表。例如 我们定义一个结构如下:

struct Node{
    int data;
    int link;
}

“data”存储信息,“link”将索引存储在下一个节点的数组中。

有人能告诉我使用数组实现链表与“普通”链表相比有什么优缺点?任何建议将不胜感激。

4 个答案:

答案 0 :(得分:10)

如果您使用数组备份链接列表,则最终会遇到的缺点。因此,这可能不是实现它的好方法。

一些直接的缺点:

  1. 数组中的死空间(当前不用于项目的条目)占用内存
  2. 您必须跟踪免费条目 - 经过一些插入和删除后,这些免费条目可以在任何地方。
  3. 使用数组会对链表的大小施加上限。
  4. 我认为有一些好处:

    1. 如果您使用的是64位系统,那么您的“指针”将占用更少的空间(尽管免费条目所需的额外空间可能超过此优势)
    2. 您可以将阵列序列化为磁盘并轻松地通过mmap()调用将其重新读入。但是,最好使用某种协议缓冲区来实现可移植性。
    3. 你可以保证数组中的元素在内存中彼此接近。

答案 1 :(得分:2)

  

有人能告诉我使用数组实现链表的优势和劣势与“普通”链表相比有哪些?

链接列表具有以下复杂性:

  • 缺点x xs: O(1)
  • 追加n m: O(n)
  • index i xs: O(n)

如果您的表示使用严格的连续数组,则会有不同的复杂性:

  • 缺点是需要复制旧数组: O(n)
  • append将需要将两个数组复制到一个新的连续空间中: O(n + m)
  • index可以实现为数组访问: O(1)

也就是说,根据数组实现的链​​表API将表现得像一个数组。

您可以通过使用严格数组的链接列表或树来缓解这种情况,从而导致绳索或指树或延迟序列。

答案 2 :(得分:0)

以两种方式实现堆栈。    首先使用数组,第二个使用链表。

使用数组的一些不利因素然后大多数程序员在堆栈工具中使用链表。

首先是使用链表的堆栈首先不要声明堆栈大小而不限制堆栈中的数据存储。第二个是指针文章中的链表,用于声明和使用它。

链接列表中只使用一个指针。它叫做顶尖指针。

堆栈是lifo方法的用法。但链表程序实现中有一些缺点。

大多数程序员使用喜欢列表来使用堆栈实现。

答案 3 :(得分:0)

使用Array实现,您可以使用顺序&另一方面,更快地访问列表节点, 如果使用指针实现链接列表,则可以随机访问节点。 当您处理固定的no时,数组实现很有用。对于元素,因为就性能而言,调整数组的大小是昂贵的,因为如果需要从列表的中间插入/删除节点,则必须在每个节点之后移位。 与此相反,当你不知道没有时,你应该使用指针实现。你想要的节点,因为这样的列表可以有效地增长/缩小你不需要移动任何节点,只需解除引用即可完成。引用指针。