我最近刚刚启动了一个项目,其中包含一些已编写的代码。我决定调查他的实现,发现他实现了一个带有单链表的优先级队列。
我对SLL的理解是,由于您可能必须遍历整个列表,因此实现它是低效的,这就是Heaps首选的原因。但是,也许我错过了它背后的某种推理,并且想知道是否有人曾选择SLL作为优先级队列的堆?
答案 0 :(得分:0)
在大学时我被告知,我们使用链接列表的唯一原因是帮助我们理解指针。
答案 1 :(得分:0)
是的情况,其中SLL优于用于实现优先级队列的堆。例如:
alarm()
系统调用版本时遇到了这个问题。我根本无法承受O(log n)查找时间。与此相关的是,您需要一次删除多个元素。从SLL中删除k个元素需要O(k)时间,而堆需要O(k log n)时间。realloc
所需的时间,那么这个策略就出来了。如果将堆实现为二叉树,那么对于SLL,您需要两个指针而不是一个指针。