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

时间:2012-06-11 05:39:01

标签: stack queue

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

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

如何区分堆栈和队列?

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

在高级编程中,

堆栈被定义为通过在现有元素的“顶部”放置新元素来延长的元素列表或序列,并通过从现有元素的顶部移除元素来缩短。这是一个ADT [抽象数据类型],其数学运算为“push”和“pop”。

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

我能得到更详细的答案吗?请帮帮我。

12 个答案:

答案 0 :(得分:142)

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

Queue是一个FIFO(先进先出)数据结构。维基百科的相关链接包含详细说明和示例。

答案 1 :(得分:104)

想象一下一叠纸。放入堆栈的最后一块是在顶部,所以它是第一个出来的。这是 LIFO 。添加一张纸称为"推送",并且删除一张纸称为"弹出"。

想象一下商店的队列。排在第一位的人是第一个脱节的人。这是 FIFO 。一个人排队等候#34;并且一个人脱节了#34;出局"。

答案 2 :(得分:61)

视觉模型

煎饼 Stack (LIFO)

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

pancake stack

Queue (FIFO)

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

dmv line

有趣的事实:英国人将行人称为Queue

答案 3 :(得分:36)

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

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

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

这很简单!

答案 4 :(得分:14)

<强>队列

队列是一个有序的项目集合。

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

项目被插入队列的“后方”的另一端。

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

<强>堆栈

Stack是一组项目。

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

插入物品&amp;在一端被删除称为“堆栈顶部”。

这是一个动态的&amp;不断变化的对象。

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

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

答案 5 :(得分:13)

<强> STACK:

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

    1. 队列是同一类型元素的集合。它是一个线性列表,其中插入可以在列表的一端进行,名为 ,并且删除只能在另一端进行,称为列表的
    2. 队列的行为类似于先进先出(FIFO)系统。

答案 6 :(得分:5)

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

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

答案 7 :(得分:1)

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

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

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

QUEUE:

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

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

答案 8 :(得分:1)

尝试过度简化堆栈和队列的描述, 它们都是信息元素的动态链,可以从链的一端访问,它们之间唯一真正的区别在于:

使用堆栈时

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

带队列

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

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

此外,有意使用单词元素以尽可能抽象出虚构链并将其与特定编程语言分离  条款。这个称为元素的抽象信息实体可以是任何东西,从指针,值,字符串或字符,对象,......取决于语言。

在大多数情况下,尽管它实际上是值或内存位置(即指针)。其余的只是将这个事实隐藏在语言术语&lt;

之后

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

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

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

答案 9 :(得分:0)

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

QUEUE是FIFO列表(先进先出)。意思是首先插入一个元素 删除first.e.g人民队列。

答案 10 :(得分:0)

堆叠一个被认为是垂直的集合。首先要了解一个集合是一个收集和组织其他较小OBJECTS的OBJECT。这些较小的OBJECTS通常称为Elements。这些元素在A B C顺序中被“推”到堆栈中,其中A是第一个,C是最后一个。垂直它看起来像这样:                                                   添加第3个元素)C                                                   第二个元素添加)B                                                   第一个元素添加)A

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

回想一下,“A”是第一个被推入堆栈的元素,而“C”是推送到堆栈的最后一个项目。如果您决定要查看堆栈底部的内容,那么堆栈中的3个元素是有序的A是第一个B是第二个,C是第三个元素,顶部必须弹出然后是添加第二个元素以查看堆栈的底部。

答案 11 :(得分:0)

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

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

堆栈使用push、pop、peek、size和clear。队列使用入队、出队、窥视、大小和清除。