134

堆栈和队列之间的基本区别是什么?

请帮助我,我无法找到差异。

你如何区分堆栈和队列?

我在各种链接中搜索答案并找到了这个答案..

在高级编程中,

堆栈被定义为一个列表或元素序列,通过将新元素放置在现有元素的“顶部”来加长,并通过从现有元素的顶部移除元素来缩短。它是一种 ADT[Abstract Data Type],具有“push”和“pop”的数学运算。

队列是一系列元素,通过将新元素放在现有元素的后面来添加,并通过删除队列前面的元素来缩短。它是一个 ADT[抽象数据类型]。在 Java、C++、Python 等编程中对这些术语有更多的理解。

我能有一个更详细的答案吗?请帮我。

4

12 回答 12

158

Stack是一种 LIFO(后进先出)数据结构。维基百科的相关链接包含详细的描述和示例。

队列是一种 FIFO(先进先出)数据结构。维基百科的相关链接包含详细的描述和示例。

于 2012-06-11T05:46:47.880 回答
144

想象一摞纸。放入堆栈的最后一块在顶部,因此它是第一个出来的。这是后进先出。添加一张纸称为“推”,取出一张纸称为“弹出”。

想象一下商店里排起了长队。第一个排队的人是第一个出线的人。这是先进先出。排队的人“入队”,出队的人“出队”。

于 2016-01-27T07:28:02.300 回答
90

视觉模型

煎饼 堆栈(LIFO)

添加和/或删除一个的唯一方法是从顶部。

煎饼堆栈

队列(FIFO)

当一个人到达时,他们到达队列的末端,当一个人离开时,他们从队列的前面离开。

车行

有趣的事实:英国人将排队的人称为队列

于 2017-08-16T15:48:33.710 回答
38

您可以将两者都视为事物的有序列表(按它们添加到列表的时间排序)。两者的主要区别在于新元素如何进入列表而旧元素如何离开列表。

对于堆栈,如果我有一个 list a, b, c,并且我添加d了 ,它会被添加到最后,所以我最终得到a,b,c,d. 如果我想弹出列表中的一个元素,我会删除我添加的最后一个元素,即d. 弹出后,我的列表a,b,c又出现了

对于队列,我以相同的方式添加新元素。添加后a,b,c变为. 但是,现在当我弹出时,我必须从列表的前面取出一个元素,所以它变成了.a,b,c,ddb,c,d

这很简单!

于 2012-06-11T05:47:51.423 回答
14

队列

队列是项目的有序集合。

项目在队列的“前端”一端被删除。

项目被插入到队列的另一端,称为“后部”。

第一个插入的项目是第一个被删除的 (FIFO)。

堆栈是项目的集合。

它只允许访问一个数据项:插入的最后一项。

在称为“堆栈顶部”的一端插入和删除项目。

它是一个动态且不断变化的对象。

所有数据项都放在堆栈顶部并从顶部取出

这种访问结构称为后进先出结构 (LIFO)

于 2013-10-08T07:43:54.800 回答
13

堆:

  1. 堆栈被定义为一个元素列表,我们只能在堆栈顶部插入或删除元素。
  2. 堆栈的行为类似于后进先出 (LIFO) 系统。
  3. 堆栈用于在函数之间传递参数。在调用函数时,参数和局部变量存储在堆栈中。
  4. 提供递归支持的高级编程语言(如 Pascal、c 等)使用堆栈进行簿记。请记住,在每次递归调用中,都需要保存参数的当前值、局部变量和返回地址(调用后控件必须返回的地址)。

队列:

  1. 队列是同类型元素的集合。它是一个线性列表,其中插入可以发生在列表的一端,称为列表的后端,而删除只能发生在另一端,称为列表的前端
  2. 队列的行为类似于先进先出 (FIFO) 系统。
于 2013-04-09T04:22:30.567 回答
7

堆栈是元素的集合,可以一次存储和检索一个。元素按其存储时间的相反顺序检索,即最新存储的元素是下一个要检索的元素。堆栈有时称为后进先出 (LIFO) 或先进后出 (FILO) 结构。在检索到最新元素(通常称为“顶部”元素)之前,无法检索先前存储的元素。

队列是元素的集合,可以一次存储和检索一个。元素按其存储时间的顺序被检索,即存储的第一个元素是下一个要检索的元素。队列有时被称为先进先出 (FIFO) 或后进后出 (LILO) 结构。在检索到第一个元素(通常称为“前”元素)之前,无法检索随后存储的元素。

于 2012-06-11T05:46:35.427 回答
2

堆栈:堆栈被定义为一个元素列表,我们只能在堆栈顶部插入或删除元素

堆栈用于在函数之间传递参数。在调用函数时,参数和局部变量存储在堆栈中。

堆栈是元素的集合,可以一次存储和检索一个。元素按其存储时间的相反顺序检索,即最新存储的元素是下一个要检索的元素。堆栈有时称为后进先出 (LIFO) 或先进后出 (FILO) 结构。在检索到最新元素(通常称为“顶部”元素)之前,无法检索先前存储的元素。

队列:

队列是同类型元素的集合。它是一个线性列表,其中插入可以发生在列表的一端,称为列表的后端,而删除只能发生在另一端,称为列表的前端

队列是元素的集合,可以一次存储和检索一个。元素按其存储时间的顺序被检索,即存储的第一个元素是下一个要检索的元素。队列有时被称为先进先出 (FIFO) 或后进后出 (LILO) 结构。在检索到第一个元素(通常称为“前”元素)之前,无法检索随后存储的元素。

于 2013-04-17T15:09:19.310 回答
2

为了尽量简化堆栈和队列的描述,它们都是动态的信息元素链,可以从链的一端访问,它们之间唯一真正的区别是:

使用堆栈时

  • 您在链的一端插入元素,然后
  • 您从链的同一端检索和/或删除元素

排队时

  • 您在链的一端插入元素,然后
  • 您从另一端检索/删除它们

注意:我在这种情况下使用检索/删除的抽象措辞,因为有些情况下您只是从链中检索元素,或者在某种意义上只是读取它或访问它的值,但也有当您从链中删除元素的情况链,最后还有一些实例,当您使用同一个调用执行两个操作时。

此外,为了尽可能地抽象虚构的链并将其与特定的编程语言术语解耦,特意使用了元素一词。这个称为元素的抽象信息实体可以是任何东西,从指针、值、字符串或字符、对象……取决于语言。

在大多数情况下,尽管它实际上是一个值或一个内存位置(即指针)。其余的只是将这个事实隐藏在语言行话后面<

当元素的顺序很重要并且需要与元素首次进入程序时的顺序完全相同时,队列会很有帮助。例如,当您处理音频流或缓冲网络数据时。或者当您执行任何类型的存储和转发处理时。在所有这些情况下,您需要以与进入程序的顺序相同的顺序输出元素的顺序,否则信息可能会失去意义。因此,您可以将程序分解为从某个输入中读取数据、进行一些处理并将它们写入队列的部分,以及从队列中检索数据的部分处理它们并将它们存储在另一个队列中以供进一步处理或传输数据.

当您需要临时存储将在程序的直接步骤中使用的元素时,堆栈会很有帮助。例如,编程语言通常使用堆栈结构将变量传递给函数。他们实际上所做的是将函数参数存储(或推送)在堆栈中,然后跳转到他们从堆栈中删除和检索(或弹出)相同数量的元素的函数。这样,堆栈的大小取决于函数嵌套调用的数量。此外,在一个函数被调用并完成它正在做的事情之后,它使堆栈处于与调用之前完全相同的状态!这样,任何函数都可以使用堆栈操作,而忽略其他函数如何使用它。

最后,您应该知道还有其他术语用于相同的类似概念。例如,堆栈可以称为堆。这些概念也有混合版本,例如双端队列可以同时作为堆栈和队列运行,因为它可以同时被两端访问。此外,数据结构作为堆栈或队列提供给您这一事实并不一定意味着它是这样实现的,在某些情况下,数据结构可以作为任何东西实现并作为特定的数据结构仅仅是因为它可以表现得像这样。换句话说,如果您为任何数据结构提供 push 和 pop 方法,它们就会神奇地变成堆栈!

于 2016-10-13T12:43:53.113 回答
1

堆叠一个被认为是垂直集合。首先要明白集合是一个集合和组织其他更小的对象的对象。这些较小的对象通常称为元素。这些元素按 ABC 顺序“推入”堆栈,其中 A 排在第一位,C 排在最后。垂直它看起来像这样:添加第 3 个元素)C 添加第 2 个元素)B 添加第 1 个元素)A

请注意,首先添加到堆栈中的“A”位于底部。如果要从堆栈中删除“A”,首先必须删除“C”,然后是“B”,最后是目标元素“A”。堆栈在处理堆栈的复杂性时需要 LIFO 方法。(后进先出)从堆栈中删除元素时,正确的语法是 pop。我们不会从堆栈中删除元素,而是将其“弹出”。

回想一下,“A”是第一个压入堆栈的元素,“C”是最后一个压入堆栈的元素。如果您决定要查看堆栈底部的内容,因为 3 个元素都在堆栈上,排序 A 是第一个 B 是第二个元素,C 是第三个元素,顶部必须被弹出然后添加的第二个元素是为了查看堆栈的底部。

于 2014-04-08T16:42:14.950 回答
1

STACK 是一个 LIFO(后进先出)列表。意味着假设 3 个元素被插入到堆栈中,即 10、20、30。首先插入 10,最后插入 30,因此首先从堆栈中删除 30,最后从堆栈中删除 10。这是一个 LIFO 列表(后进先出)。

QUEUE 是 FIFO 列表(先进先出)。意味着首先插入一个元素,该元素首先要被删除。例如人群队列。

于 2014-03-09T15:03:22.573 回答
0

简单地说,堆栈是一种数据结构,它以与存储数据相反的顺序检索数据。这意味着插入和删除都遵循 LIFO(后进先出)系统。您只能访问堆栈的顶部。

使用队列,它以与排序相同的顺序检索数据。删除时可以访问队列的前面,添加时可以访问队列的后面。这遵循 FIFO(先进先出)系统。

堆栈使用 push、pop、peek、size 和 clear。队列使用 Enqueue、dequeue、peek、size 和 clear。

于 2021-05-31T06:54:04.773 回答