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

2018-03-20 07:33:01 +08:00
 miniyao
平时用到双向链表的机会少,有哪些场景下使用双向链表是比较好的选择?
9724 次点击
所在节点    Python
67 条回复
linhanqiu
2018-03-20 12:11:21 +08:00
面试必考?平常的时候写小东西时提高效率?
swulling
2018-03-20 12:14:19 +08:00
双向链表是很常用的数据结构啊,因为单向链表没啥实用价值,基本用的链表都是双向的


比如 Redis 的双向链表,http://redisbook.com/preview/adlist/implementation.html,具体的用处有发布订阅机制,客户端维护,列表键底层实现之一,等等
vjnjc
2018-03-20 12:26:38 +08:00
以前都喜欢自己写结构,tree,node,链表,后来发现都有现成实现。。。
RubyJack
2018-03-20 12:28:05 +08:00
和 hashmap 一起搞 lru
BlockBlockBlock
2018-03-20 12:31:58 +08:00
哦,原来在 python 节点下……那就怪不得有人不懂了……
sohoer
2018-03-20 12:36:18 +08:00
Queue
aheadlead
2018-03-20 12:38:13 +08:00
STL 的 deque 了解一下
bumz
2018-03-20 12:41:21 +08:00
@aheadlead deque 一般不是链表实现的
bumz
2018-03-20 12:47:06 +08:00
@bumz STL deque 不能用链表实现,因为 STL deque 的 random access 是 O(1)
aheadlead
2018-03-20 12:47:28 +08:00
@bumz 是我错了…应该是 list
bumz
2018-03-20 12:49:01 +08:00
@BlockBlockBlock 变长数组随机是 O(1),不能用链表实现

变长数组一般用空间自动翻倍的数组实现
BlockBlockBlock
2018-03-20 14:15:11 +08:00
@bumz

翻倍的空间从哪里来?怎么管理?
BlockBlockBlock
2018-03-20 14:22:09 +08:00
@bumz
我不明白你是怎么脑补出来我说的链表每个节点是装着一个元素的?如果每个链表节点装的是一片内存空间呢?这是典型的内存片的管理方式你们大学时候上操作系统课不学的吗?
vincenttone
2018-03-20 14:27:50 +08:00
php 的 array,redis 的 list 等等等等
safeoy
2018-03-20 14:37:15 +08:00
LRU
wcsjtu
2018-03-20 16:09:22 +08:00
Django 的 lru cache 了解一下?
snail1988
2018-03-20 19:56:08 +08:00
@BlockBlockBlock 要求随机存取 O(1)的数据结构为什么用链表,上来就喷别人
BlockBlockBlock
2018-03-20 20:09:02 +08:00
@snail1988

请问你看懂我在说什么了吗?
如果没看懂我也不多做解释了……
我不是你计算机老师,不负责教你计算机基础知识……
orangeade
2018-03-20 20:11:02 +08:00
python 里多了去了,有空多看看 python 解释器,pypy 和官方库的源码
hitmanx
2018-03-20 20:37:24 +08:00
@snail1988 我觉得他说的可能是类似 std::deque 的实现,实际上本质是 fixed-sized 的 vector 的 list,通过把每个 vector(chunk)的首地址 cache 起来,是可以做到 O(1)的 random access 的.但是实际上这个 cache 首地址的数据结构,就是一个 vector

https://stackoverflow.com/questions/6292332/what-really-is-a-deque-in-stl
http://en.cppreference.com/w/cpp/container/deque

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

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

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

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

© 2021 V2EX