双向链表有哪些比较实用的应用场景?

2018-03-20 07:33:01 +08:00
 miniyao
平时用到双向链表的机会少,有哪些场景下使用双向链表是比较好的选择?
9729 次点击
所在节点    Python
67 条回复
glasslion
2018-03-21 14:44:41 +08:00
@hszzz 别听那个 @BlockBlockBlock 胡说,vector/deque 都不是用链表实现的
KIDJourney
2018-03-21 16:51:56 +08:00
@hitmanx 口胡,这样搞就不是用双向链表实现的了。

@BlockBlockBlock 你举个例子吧?我下午看了下 c++ vector 和 list 的实现,都没有用链表。
hszzz
2018-03-21 17:49:02 +08:00
@glasslion 哈哈,初学者不敢和前辈们争论啊。其实我也不信,毕竟 primer 不是那样说的。
bumz
2018-03-21 22:32:30 +08:00
@BlockBlockBlock

看了你的上一条回复,我还以为你说的链表其实是 malloc 内部实现隐含的链表(还取决于具体实现)

我原本以为你知道我们说的 O(1) 是 amortized O(1)

看到你提到操作系统课,我原以为你知道高级语言的层面和系统底层具体实现的层面不可混为一谈

现在我终于明白了你用户名的含义,谢谢你的最后一条回复。
KIDJourney
2018-03-22 11:50:17 +08:00
@BlockBlockBlock 举个例子呗?
Caturra
2018-03-22 12:50:38 +08:00
@BlockBlockBlock

如果可变长度数组是所谓的 list 分块实现,单个随机访问是 O(logn),所以 n 个遍历就最坏而言是 O(nlogn),为什么?你知道你的 list 长到哪了吗?

而所谓的复制规模是关于 2 的幂递增的,即使算上复制的时间复杂度也是 O(n),
给你一个粗糙的计算方法,随机访问常数级别,O(n),复制规模是 1+2+4+...+2^log2(n)的上取整,高中数学还记得的话可算出是 O(n),均摊 O(1)没毛病

哪怕你是搞了一套算法用非等长 list 实现 O(1)就可算出访问地址以达到 O(n)的遍历,你也忽略了非连续空间访问速度上的差异,感性上效率很糟糕,实际上确实也挺糟糕的(别问为什么,我试过)
Caturra
2018-03-22 12:56:05 +08:00
list 实现这玩意的复杂度和是否等长无关,缺乏睡眠有点语无伦次了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/439569

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX