链表和队列有什么区别?

时间:2018-01-23 12:29:11

标签: data-structures linked-list

我对数据结构很陌生,似乎两种数据结构都有更多相似之处。

In this answer它表示界面存在差异。  请解释一下。

5 个答案:

答案 0 :(得分:3)

我和你有同样的问题!这是我发现的:

队列本质上只是比 LinkedList 更具限制性。例如,在 LinkedList 中,您可以使用 .add(int index, Object obj) 方法,但是如果您尝试使用 Queue 接口执行此操作,则会出现错误,因为使用 Queue 您只能在尾端添加元素。类似地,在 LinkedList 中,您可以使用 .remove(int index).remove(Object obj),但是尝试使用 Queue 执行此操作会导致错误,因为您只能从头部删除一个对象。因此,从本质上讲,当涉及到可以在其上使用的方法时,队列的选择较少。 (可能还有更多,但这是与我最相关的。)

两者之间有一些相似之处。例如,它们都有.poll()方法,结果是一样的:从Object中移除head元素。

这里有一些链接,您可以在其中比较两者的方法(滚动到每个页面的底部以查看它们,您会立即看到 LinkedList 有更多):

https://www.geeksforgeeks.org/linked-list-in-java/(链表) https://www.geeksforgeeks.org/queue-interface-java/(队列)

答案 1 :(得分:2)

链接列表是节点列表。每个节点包含一个地址字段,该地址字段包含其下一个节点的地址。这种结构的原因是从第一个节点到最后一个节点遍历列表。这种类型的结构称为单链表。链接列表也可以双向链接,在该结构中,节点将具有两个地址字段,其中一个字段将存储其先前节点的地址,而一个地址将保存其下一个节点的地址。链接列表中最重要的是它的第一个节点地址必须存储在一个地址变量中,以便我们可以随时遍历链接列表。

但是Queue可以是链接列表或节点数组。在列表中,节点可以在任何地方插入。但是在队列中,必须在列表的开头插入新节点。队列基于FIFO工作,即先进先出。因此,当您在队列中使用pop命令时,如果它是链接列表,则必须删除列表的最后一个节点并返回该最后一个节点的值。因此,队列也可以是列表,但具有基于FIFO的原则。

您将在线获得更多信息。正确阅读并尝试了解其中的差异。

答案 2 :(得分:2)

队列是“ FIFO =先进先出”的任何数据结构。这是一个等候名单。 (在英国,该术语用在普通对话中……您“排队等候”而不是“排队等候”。)

堆栈是“ LIFO =后进先出”的任何数据结构。就像自助餐厅里的一堆菜一样,是一个下推式堆叠。

链接列表是这两种结构的可能实现。它由包含指向列表中相邻节点的指针的节点组成。

但是,还有许多其他实现。各种“树”也可以用于实现队列和堆栈。普通数组可以做到这一点,尽管当然数组不能“增长”。

理想情况下,如今,您只需使用自己喜欢的语言使用适当的“容器类”,并 fuhgeddabout 实际实现的方式。 “您知道它有效,因此您不在乎如何。”实际执行此类操作可能是一项学术活动。

答案 3 :(得分:1)

列表只是一个事物列表(项目,对象等)。例如,您在学期中学习的课程列表。您正在收听的歌曲列表。此页面上此问题的答案列表。没有与列表关联的订单。您可以在任何地方将列表添加到列表中,您可以从任何位置取消列表中的项目,它不会更改列表的定义。它只是一组类似(或不那么相似)的项目。

现在考虑站在ATM机或银行出纳员面前的人员名单。该列表必须遵守特定的顺序。行(列表)中的第一个人是将首先提供的人(并且将是第一个离开此列表的人)。一个新进入的人将成为队列中的最后一个人,并且在他面前的每个人都被送达后将被送达。列表中间的人不应该跳线。这是队列的一个例子。您还可以猜出队列的优先级是什么(想想在办理登机手续时银行和金牌会员的航空公司)。

我希望这能解释其中的差异。

答案 4 :(得分:1)

在Java(可能还有其他语言)中,LinkedList实现Queue接口。因此,从本质上讲,LinkedList是一个队列。它具有Queue的所有功能以及更多功能。请记住,队列不是链接列表,而是链接列表,因为链接列表是在队列上构建和扩展的。

看到这个:

enter image description here