2

使用循环指针和尾指针构建双向链表的优点/缺点是什么?哪个更适合构建双端队列?

在我看来,它们在执行所有搜索、插入和删除节点时几乎相同。唯一不同的是,对于尾指针双向链表,需要有一个尾指针指向最后一个节点,并且每次在尾后面插入新节点时都需要更新它。此外,在循环链表中,第一个节点链接到最后一个节点,反之亦然,而在尾指针中,head->prev 和 tail-> 都指向空指针。我认为它们都非常适合构建双端队列。这一切都归结为您希望程序如何运行。如果你希望你的程序可以在头尾节点之间快速来回运行,使用循环的方法,否则,尾指针应该足够了。

这就是我对这个问题的回答。由于我还没有建立任何循环双向链表,我对它如何在机器上运行没有任何经验,但我怀疑它会和尾指针一样快。有什么建议吗?感谢大家的投入。

4

1 回答 1

1

循环双链表可能是首选,因为您可以有效地从开头或结尾添加/删除,并且它使用简单的统一数据结构。

实现循环 dbl 链表的最简单方法是保存与所有其他节点相同类型的“头”节点,但始终具有“空”项/值,并且仅用于保存指向实际的“项目节点”。

当列表为空时,head.next 和 head.prev 都将指向自身。

循环 dbl 链表的逻辑更简单,而不是尾指针变体允许“头”和“尾”在空时为空;这需要在任何修改操作中都可能更新“头”和“尾”指针,从而使逻辑更加复杂。

这里的命名有点不清楚:我曾经head指的是“列表节点”,但它可以称为“列表”或“节点”。

head.next -> first -> second -> ...
head.last -> last -> second-last -> ...

如果列表为空:

head.next -> head
head.last -> head

如果列表有一项:

head.next -> item -> head
head.last -> item -> head
于 2013-11-05T03:19:49.250 回答