堆栈,队列和链接列表

时间:2015-08-22 01:30:28

标签: data-structures linked-list stack queue

我最近开始学习数据结构,并且只有我自己的mydict = {"con": con_getinfo, "xra": xra_getinfo, "neg": neg_getinfo, "grf": grf_getinfo, "ninja" : ninja_getinfo} lookup = mydict.get(imput) if lookup: #won't fail if imput isn't on of the options print "%.6f" % (lookup["balance"]) 实现。

现在我偶然发现了两个新的数据结构:linked liststack 从我迄今学到的知识来看 queue是一个stack,只允许从其尾部插入/删除,以及
 linked listqueue,只允许在其尾部插入并仅从其头部移除。

我的问题是:
为什么我会使用这两个数据结构而不是允许从任何地方插入和删除的常规linked list? 另外,为什么这两个数据结构被归类为独立的数据结构而不是"限制访问链接列表"?

3 个答案:

答案 0 :(得分:19)

堆栈和队列有自己的存在理由。 堆栈是可以使用数组,链接列表或其他形式实现的FILO(先进先出)或LIFO(任一方式)数据结构。考虑浏览器历史。您导航到站点A - >那么 B - >然后 C - > d 。当用户向前移动时,您首先推送(在尾部插入)网站列表。这可确保当前站点始终位于堆栈的顶部。 Stack in action

然后,当用户点击后退按钮时,您弹出顶部的那个(从尾部移除 - 用于插入的同一端),这将提供上次访问的网站 - C 。因此,First In(其中 Site A )和Last Out(最后一个进入的概念是 Site D 的概念反过来成为第一个出去的人)

对于FIFO(先进先出)队列,可以说类似。考虑作业队列的示例。在执行作业时,您(不考虑任何优化算法)首先服务于该作业。这使得队列成为一个出色的数据结构,以先到先得的方式处理作业。

在这两种情况下,您都不希望在任何索引处任意删除或插入元素。不,这会导致不良行为。因此,需要堆栈/队列。我再次强调,堆栈/队列可以通过对链表实施限制来实现。

抱歉图像质量不佳 - 我只是画了它。

答案 1 :(得分:3)

  

Stack基本上是一个跟随LIFO的数据结构(LAST IN FIRST   OUT)。队列是跟随FIFO(FIRST IN FIRST OUT)的一个。

通常,StacksQueues可以使用ArraysLinked Lists来实现。

使用Linked List实现Stack的原因是,当您需要涉及LAST IN FIRST OUT表单的功能时,您不确定功能需要多少元素。因此,您可以根据需要使用LinkedList动态创建节点。

Queues

也是如此

两者都是独立的原因是因为两者都遵循不同的原则,即LIFO和FIFO。

答案 2 :(得分:0)

链表是一种数据结构,在内存中的元素之间具有一定的关系, 栈和队列是具有特定接口和行为的数据结构。栈和队列甚至可以在数组中实现,因此它们是遵循一定规则的数据结构,即栈的LIFO和队列的FIFO(不仅限于此)到链表,它们还可以在其他数据结构(如数组)中实现,它们遵循的行为和规则很重要)