【发布时间】:2013-11-25 18:26:57
【问题描述】:
据我了解,与简单链表相比,双向链表使用更多内存但 CPU 更少,并且通常提供更好的算法复杂度。
我想知道的是,与双向链表相比,简单链表何时能提供更好的整体结果。是否有明确的点/情况,之后使用一个而不是另一个无疑是最好的解决方案? (就像普通 PC 上的 x 元素之后)
我的具体问题:
我正在实现一个一般用途的链表结构,并且正在考虑是否应该包含一个返回链接,因为它会大大降低元素删除的复杂性。
谢谢。
更新:
在一个简单的链表上,什么大小的元素移除变得过于昂贵?
【问题讨论】:
-
如果我们同时使用 next 和 previous 指针遍历列表,是否需要一半的时间?
-
@SrinivasReddyThatiparthy 你的意思是搜索时间?不,不是“随机”搜索。您仍然必须平均访问 n/2 个列表条目,并且“跟随右侧链接”与“跟随左侧链接”之间没有成本差异。
-
我不知道您如何在不知道插入列表的频率的情况下回答更新后的问题。这就是产生双向链表的运行时成本的地方。您还需要知道不添加或删除前向链接的频率。为了有效地从单链表中删除列表条目,您需要在遍历期间维护“前一个”指针。这实际上是每个遍历步骤的一个局部变量分配。这什么时候变得“太贵了”?
标签: c data-structures linked-list