显示循环链接列表和跳过列表的示例

时间:2011-03-14 05:30:29

标签: algorithm circular-list

我想问一下你对什么类型的程序甚至技术的想法,我可以更好地解释循环链接列表跳过列表理论的用处>对我的同龄人。

我的编程信念是,如果你给他们一些例子和隐喻,就可以更好地掌握一个概念。

您想要创建示例程序或解决方案(编程技术或算法)。

干杯!

3 个答案:

答案 0 :(得分:1)

圆形链表的一个好用途是作业调度系统,其中每个作业都使用给定资源(例如简单操作系统中的进程)获得一定的时间。

在这种情况下,拥有一个特定的head是没有意义的,因为你总是在列表中骑自行车,你需要的只是current指针。您可以在当前作业之后添加新作业,并使用current找到要删除的作业。推进到下一个工作很简单:

current = current->next

可能的跳过列表是列表形式的字典。你维护一个指向第一个单词a的指针,它包含一个指向aardvark的普通指针和一个指向baa * a 的跳转指针。


* a :我实际上不知道他们是否是正确的单词,但他们应该接近,你希望得到这个想法。

答案 1 :(得分:0)

来自Wikipedia

  

循环链表可能是a   表示数组的自然选项   这是天然圆形的,例如该   多边形的角落,一个池子   使用和释放的缓冲区   FIFO订单,或一组进程   应该循环分享   订购。在这些应用中,a   指向任何节点的指针充当句柄   到整个清单。

圆形列表如何工作的简单可视化示例可能是想象一群人站在一个圆圈中,每个人只知道他左边的人的名字。因此,为了搜索小组中的某个人,你从第一个人(在这种情况下是一个任意的人)开始,然后移动到他知道名字的人(即他的左边),直到找到你要找的人或来再次回到第一个人。向该群组添加或删除此人只需将此人从圈子中放置/取走并将该人员已知的名称更改为右侧(如果是添加,则告诉他左侧人员的姓名) 。我希望这个例子有意义,它基本上是我在学习链表时用来可视化它的方式。

跳过列表支持快速(O(log(n)))操作,可以用作排序数据结构 - 非常类似于平衡二叉搜索树。这使得它们在我们需要快速数据插入/删除时间(如链接列表但不像数组)的任何地方都很有用,并且具有快速访问时间(如数组但与链表不同)。它们也适用于快速查询(例如,查找结构索引[i,j]中所有元素的总和(或最大值,最小值,乘积等))。

我无法想到一个足够简单的跳过列表的真实世界隐喻,数据结构看起来比我在日常生活中看到的任何东西都要复杂得多。但wikipedia解释非常明确,并且通过构建它的证明和算法应该是一个很好的起点。这是original paper的链接,也是非常易读的IMO。

答案 2 :(得分:0)

跳过列表基本上是一组额外的列表(或实际链接),放置在常规排序链表的顶部,以帮助搜索列表。

跳过列表在常规链接列表的顶部创建一种二进制搜索树,以便搜索操作占用O(log N)时间而不是O(N),从而使它们更快。您可以在任何想要使用常规链接列表的地方使用它们,但需要更快的访问权限。

以下页面对跳过列表进行了非常好的,易于理解的讨论: http://igoro.com/archive/skip-lists-are-fascinating/