首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >双链队列与单链队列相比有什么优势吗?

双链队列与单链队列相比有什么优势吗?
EN

Stack Overflow用户
提问于 2017-11-29 21:05:39
回答 2查看 1.9K关注 0票数 2

我被要求实现一个双链接队列,但我知道单链接队列很简单,它的所有主要功能都运行在big-Theta 1中。我基本上是在谈论FIFO实现(不包括像deque这样的特殊队列)。

我见过其他人使用双链接实现队列,我知道这会消耗更多的存储空间,因为每个节点需要2个指针(prev & next)。

双链队列比单链队列有什么优势吗?!

EN

回答 2

Stack Overflow用户

发布于 2020-02-09 23:32:43

您不需要在双端LL上使用双LL。双端LL (具有指向头部和尾部的指针)就足够了。

对于FIFO,主要操作是入队和出队。在链表术语中,这是add_to_end和remove_from_front。这两个操作都是具有双端链表的O(1)操作。

如果您需要一个既可以作为队列又可以作为堆栈操作的数据结构,那么您将需要一个双向链表来获得O(1)操作。没有双向链表需要O(n)的主要操作是remove_from_end/pop。这样做的原因是,您必须从最后一个节点(在下面的示例中为node3)中找到前一个节点,将其设置为尾部,然后移除指向要删除的节点的指针。使用双LL,查找该节点就像tail.prev一样简单;但是,使用双端LL,您必须执行O(n)次遍历才能找到该节点。

前1-2-3-4末尾

代码语言:javascript
复制
def remove_from_end():
# get node4 and remove node4 from being the tail. O(1) time as you have a pointer to the tail in a double ended LL.
# set tail node3 and remove the .next from node3 to node4. If you don't have .prev on node4, then it would take O(n) to find node3
票数 1
EN

Stack Overflow用户

发布于 2017-11-29 21:41:08

优点是,您可以在双向链表的任一方向上进行迭代。此外,如果数据对象很大,那么额外的内存开销不是很大的百分比。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47553585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档