展开的链表如何工作

时间:2013-05-09 10:34:23

标签: linked-list

任何人都可以解释一下展开的链表是什么。据我所知,它是一个链表,每个节点都有一系列元素。当然,这使搜索速度更快。

在此图中,在该图片中添加数据1,2,3是清楚的,没有复杂性......但为什么他们在第二个节点中添加4?为什么不在第一个节点的第四个元素?那有什么好处?他们用来分裂的策略是什么?

3 个答案:

答案 0 :(得分:2)

好处是,他们可以在不移动列表中的每个项目的情况下插入数据。您是否想要分段也取决于您自己。您可以使添加功能检查最后一个节点是否已满3/4并且在这种情况下创建一个新节点。或者他们可能做了什么:

  

如果数组已满,我们首先在当前节点之前或之后插入一个新节点,并将当前节点中的一半元素移入其中。 (http://en.wikipedia.org/wiki/Unrolled_linked_list

答案 1 :(得分:0)

将第4个数字添加到第一个节点的第4个元素中。当添加5时,它会分割该节点,其中1,2,3位于节点1中,4,5位于节点2中。

答案 2 :(得分:0)

假设您的元素不超过' n'截至目前(当然你可以在以后添加元素)并且你想创建一个链表,在缓存性能方面最好的方法是选择Unrolled链表。您在n上创建一个大小为ceil square root的块,然后如果其大小小于n的平方根的ceil,则开始在块中添加元素。因此,你最终在n个块上有平方根。这在搜索链表中的第k个节点时非常有用,因为它的复杂性现已从n减少到n的平方根。

当块已满时,意味着如果块包含等于n个元素的平方根,则必须进行移位操作,使得该块中的尾部成为下一个块的头部和下一个块的尾部成为下一个的头,依此类推,直到你达到NULL

在每个块中,维护循环链表而不是简单的链表。

希望这会有所帮助.. :)