leo*_*ora 15 c# java linked-list data-structures
另一位程序员提到他们在职业生涯中没有找到在任何专业软件中使用链表数据结构的用例.我想不出任何好的例子.他主要是C#和Java开发人员
任何人都可以提供一些例子来说明这是解决特定现实世界问题的正确数据结构吗?
相关: 链接列表的实际现实示例是什么?
Jar*_*Par 19
链接列表与可比较的数据结构(如静态或动态扩展阵列)相比具有多个优势.
任何这些优点对程序非常有价值的地方(以及LinkedList的缺点可以忽略不计)都是使用LinkedList的地方.
Mic*_*rdt 17
一个真实的例子是FIFO队列.一个简单的基于数组的列表非常糟糕,因为你需要在一端添加并在另一端删除,其中一个操作将是带有基于数组的列表的O(n)(除非你添加额外的逻辑到使用起始和结束索引),而两者都是带有链表的O(1)而无需额外的努力.
lea*_*der 11
侵入式链表是游戏开发的有趣动物.例如,有一种常见的做法是拥有一个侵入性的单一或双重链接的"渲染"列表:
class Renderable /* or class Object, whatever */ { // ... Renderable * m_pNext; Renderable * m_pPrev; // or not, if singly-linked // ... }
当Renderables进入和退出时,他们可以使用此列表注册自己 - 而不会导致任何内存分配.如果他们的渲染深度或优先级被更改,他们可以删除并重新插入自己,等等.
当需要渲染时,您需要做的就是找到列表的头部并压缩,调用适当的方法!
(当然,这个主题有很多变化,有多个单独的列表,等等.你不需要有一个侵入性列表来完成这项工作,我只是发现有趣的侵入性.)
堆栈和队列是链接列表的非常清晰的示例,但正如其他人已经提到的那样,我想添加一些其他示例:
DOM将节点存储为链接列表.一个简单的javascript示例,在任何语言中都是相同的:
for (var node = parent.firstChild; node != null; node = node.nextSibling) {
// ..
}
Run Code Online (Sandbox Code Playgroud)
我认为java开发人员在某些时候遇到过XML.
树是链表的另一个很好的例子,即使它们不是简单的一维链表.做过很多java开发的人可能遇到过TreeMaps和TreeSets.
整个讨论对我来说似乎有点傻.链接列表是一种在任何地方都使用的基本数据结构.人们可能认为他/她没有碰到它们的唯一原因是你不必担心当今高级语言中数据结构的实现,但当然它们仍然存在.
单链表的一些例子。
双链表的一些例子。