如何在数组中实现链表?

Joe*_*oel 4 data-structures

这个问题提到可以在数组中实现链表。

虽然我可以想象如何使用多个阵列执行此操作,但是如何使用单个阵列执行此操作?

编辑:这样做是否可以有效地考虑到将需要从列表中删除并插入项目-大概需要标识数组中的自由元素?

roa*_*chs 5

如果是对象数组,则每个对象将存储一个值和一个指向下一个对象的指针。

[0] -> {"a",1}
[1] -> {"b",2}
[2] -> {"c",4}
[3] -> {"1",5}
[4] -> {"d",7}
[5] -> {"2",6}
[6] -> {"3",8}
[7] -> {"e",-1}
[8] -> {"4",-1}
Run Code Online (Sandbox Code Playgroud)

因此,这里有2个链表,第一个是:

“ a”->“ b”->“ c”->“ d”->“ e”

第二个:

“ 1”->“ 2”->“ 3”->“ 4”

两者都使用索引-1作为列表的末尾。

然后,您将需要多个指针(每个列表一个)来确定您在列表中的位置。

老实说,我什至不确定我是否理解这个问题,但无论如何都想提出一些想法。


Jer*_*fin 1

例如,您可以通过将第一个数据项放入数组的元素中,并将下一项的索引放入第二个元素中来获得整数链接列表。这将限制您存储与索引兼容/可转换为索引的类型。

  • 您通常希望使用空闲节点的链接列表来跟踪空闲空间。因此,您(至少)有一个指向正在使用的元素开头的“指针”(索引),另一个指向空闲元素。当您释放一个元素时,您将其添加到空闲列表中。当您需要某个元素时,可以将其从空闲列表中取消链接。 (3认同)
  • 将包含值和索引的对象/结构(我不知道Java是否有结构)存储为两个字段。要存储可用空间,只需在同一个数组中保留两个链表,其中一个包含所有空闲元素,另一个包含所有正在使用的元素。 (2认同)