什么是链接数组?

问题描述 投票:0回答:1

有人可以解释链接数组背后的逻辑(即在使用链接数组的合并排序中)吗?比如我们为什么要使用它们以及它是如何工作的?

我试着理解这里的代码:合并排序变体:使用链接数组

但无法理解其背后的逻辑。

arrays algorithm data-structures linked-list mergesort
1个回答
0
投票

如问题中所用,它是单个链表的变体,其中数据保存在一个数组中,下一个元素的索引保存在第二个数组中。

Wiki 文章包括这种变体,结合了它的链表(节点数组)和并行数组文章(其中索引保存在单独的数组中):

https://en.wikipedia.org/wiki/Linked_list#Linked_lists_using_arrays_of_nodes

https://en.wikipedia.org/wiki/Parallel_array

问题代码中,a[]包含数据,link[]包含a[]的下一个元素的索引,link[0]用作head索引,其中包含a[]的第一个元素的索引.在问题的代码中没有使用 a[0],所以对于 n 个元素,两个数组大小都是 n+1。

在我对那个问题的回答中,我在 link[] 之外使用了一个单独的变量作为 head 索引,这样两个数组大小都是 n,类似于 wiki 文章,它称之为 listHead。

最终结果类似于单链表,插入或删除只需要更改link[]中的两个索引(其中一个可以是listHead),而不必旋转数组的一部分。

维基解释为什么要这样做是针对不支持指针、引用......,并且不支持记录(类、结构......)的编程语言。

© www.soinside.com 2019 - 2024. All rights reserved.