堆栈和队列之间的基本区别是什么?
堆栈和队列之间的基本区别是什么?
请帮助我,我无法find差异。
你如何区分一个堆栈和一个队列?
我在各种链接search的答案,并find了这个答案..
在高级编程中,
堆栈被定义为通过将新元素放置在现有元素的顶部而被延长的元素的列表或序列,并且通过从现有元素的顶部移除元素而缩短。 它是一个ADT [抽象数据types],其math运算是“push”和“pop”。
队列是通过将新元素放置在现有元素的后面并通过删除队列前面的元素而缩短的元素序列。 这是一个ADT [抽象数据types]。 在Java,C ++,Python等编程中对这些术语有更多的了解。
我可以有一个更详细的答案吗? 请帮帮我。
堆栈是一个LIFO(后进先出)数据结构。 相关的维基百科链接包含详细的描述和例子。
队列是一个FIFO(先进先出)数据结构。 相关的维基百科链接包含详细的描述和例子。
你可以把它们看作是一个有序的事物列表(按它们被添加到列表的时间sorting)。 两者之间的主要区别在于新元素如何进入列表并且旧元素离开列表。
对于一个堆栈,如果我有一个列表a, b, c
,并且我添加了d
,那么它就会被添加到最后,所以我以a,b,c,d
。 如果我想popup列表的一个元素,我删除了我添加的最后一个元素,即d
。 stream行后,我的列performance在a,b,c
了
对于队列,我以相同的方式添加新的元素。 a,b,c
在加d
之后变成a,b,c,d
d
。 但是,现在当我popup时,我必须从列表的前面取一个元素,所以它变成b,c,d
。
这很简单!
想象一堆纸 。 第一块放在堆栈底部,所以最后一块出来。 这是LIFO 。
想像一下商店里的一个队列 。 排队的第一个人是第一个离开队伍的人。 这是FIFO 。
队列
队列是项目的有序集合。
项目在队列的前端被称为“前端”的一端被删除。
项目被插入队列的另一端,称为“后方”。
插入的第一个项目是第一个被删除(FIFO)。
堆
堆栈是项目的集合。
它只允许访问一个数据项:插入的最后一个项目。
项目在一端被插入和删除,称为“栈顶”。
这是一个dynamic的,不断变化的对象。
所有的数据项都放在堆栈顶部,并从顶部取出
这种访问结构被称为后进先出结构(LIFO)
STACK:
- 堆栈被定义为一个元素列表,我们可以在其中插入或删除堆栈顶部的元素。
- 堆栈的行为就像是后进先出(LIFO)系统。
- 堆栈用于在函数之间传递参数。 在调用函数时,参数和局部variables存储在堆栈中。
- 提供recursion支持的高级编程语言(如Pascal,C等)使用堆栈进行簿记。 请记住,在每次recursion调用中,都需要保存当前参数值,局部variables和返回地址(在调用之后控制器必须返回的地址)。
队列:
- 队列是相同types元素的集合。 这是一个线性列表,其中插入可以发生在列表的一端,称为列表的后面 ,并且删除可以仅发生在另一端,称为列表的前面
- 队列的行为就像先进先出(FIFO)系统。
一个视觉模型
薄煎饼 栈 (LIFO)
添加一个和/或删除一个的唯一方法是从顶部。
线 队列 (FIFO)
当到达时,他们到达队列的末尾,当他们离开队列的时候。
有趣的事实是:英国人把人排成队列
堆栈是元素的集合,可以一次存储和检索一个元素。 元素是以与其存储时间相反的顺序检索的,即存储的最新元素是下一个要检索的元素。 堆栈有时被称为后进先出(LIFO)或先进后出(FILO)结构。 先前存储的元素只有在检索到最新元素(通常称为“top”元素)后才能被检索。
队列是元素的集合,可以一次存储和检索一个元素。 元素按照其存储时间的顺序被检索,即存储的第一个元素是下一个要检索的元素。 队列有时被称为先进先出(FIFO)或后进后出(LILO)结构。 随后存储的元素直到第一个元素(通常称为“前”元素)被获取后才能被检索。
堆栈:堆栈被定义为一个元素的列表,我们可以在堆栈顶部插入或删除元素
堆栈用于在函数之间传递参数。 在调用函数时,参数和局部variables存储在堆栈中。
堆栈是元素的集合,可以一次存储和检索一个元素。 元素是以与其存储时间相反的顺序检索的,即存储的最新元素是下一个要检索的元素。 堆栈有时被称为后进先出(LIFO)或先进后出(FILO)结构。 先前存储的元素只有在检索到最新元素(通常称为“top”元素)后才能被检索。
队列:
队列是相同types元素的集合。 这是一个线性列表,其中插入可以发生在列表的一端,称为列表的后面,并且删除可以仅发生在另一端,称为列表的前面
队列是元素的集合,可以一次存储和检索一个元素。 元素按照其存储时间的顺序被检索,即存储的第一个元素是下一个要检索的元素。 队列有时被称为先进先出(FIFO)或后进后出(LILO)结构。 随后存储的元素直到第一个元素(通常称为“前”元素)被检索出来才能被检索。
STACK是LIFO(后进先出)列表。 意思是假设3个元素被插入堆栈,即10,20,30。 10先插入,最后30插入,所以30先从堆栈中删除,10最后从堆栈中删除,这是一个LIFO列表(后进先出)。
QUEUE是FIFO列表(先进先出)。首先插入一个要被删除的元素,首先被删除。
堆叠一个被认为是垂直的集合。 首先了解一个集合是一个对象,它收集和组织其他较小的对象。 这些较小的对象通常被称为元素。 这些元素按ABC顺序在堆栈上“推”,其中A是第一个,C是最后一个。 垂直它看起来像这样:添加第三个元素)添加第二个元素B添加第一个元素)
请注意,首先添加到堆栈中的“A”在底部。 如果你想从堆栈中删除“A”,你首先必须删除“C”,然后“B”,最后你的目标元素“A”。 在处理堆栈的复杂性时,堆栈需要使用LIFO方法(后进先出)从堆栈中删除元素时,会popup正确的语法。 我们不会从堆栈中删除一个元素,我们会“popup”它。
回想一下,“A”是第一个被推入堆栈的元素,“C”是堆栈中的最后一个元素。 如果你认为你想看看堆栈底部是什么,那么堆栈中的3个元素是有序的,A是第一个B是第二个,C是第三个元素,顶部将不得不popup,然后添加第二个元素以查看堆栈的底部。
为了尽量简化堆栈和队列的描述,它们都是可以从链的一端访问的信息元素的dynamic链,它们之间唯一真正的区别在于:
在使用堆栈时
- 你在链的一端插入元素
- 您从链的同一端检索和/或删除元素
同时拥有一个队列
- 你在链的一端插入元素
- 你从另一端检索/删除它们
注 :我在这个上下文中使用抽象/删除的抽象措辞,因为有些情况下你只是从链中检索元素,或者在某种意义上只是读取或访问它的值,但也有实例,当你从链,并最终有一些情况下,当你做同样的电话的两个行动。
此外,单词元素是特意使用的,以便尽可能多地提取虚构链,并将其从特定的编程语言术语中分离出来。 这个称为元素的抽象信息实体可以是任何东西,从一个指针,一个值,一个string或一个字符,一个对象……取决于语言。
在大多数情况下,虽然它实际上是一个值或一个内存位置(即指针)。 其余的只是把这个事实隐藏在语言术语背后
如果元素的顺序很重要,并且需要与元素首次进入程序时完全相同,则排队可能会有所帮助。 例如,当您处理audiostream或缓冲networking数据时。 或者当你做任何types的存储和转发处理。 在所有这些情况下,您需要按照进入程序的顺序输出元素的顺序,否则信息可能会停止有效。 所以,你可以在一个从某些input中读取数据的部分中破坏你的程序,做一些处理并将它们写入队列中,从队列中检索数据的部分处理它们并将它们存储在另一个队列中以供进一步处理或传输数据。
当您需要临时存储要在程序的即时步骤中使用的元素时,堆栈可能会有所帮助。 例如,编程语言通常使用堆栈结构将variables传递给函数。 他们实际上做的是将函数参数存储(或推送)到堆栈中,然后跳转到从堆栈中移除和检索(或popup)相同数量元素的函数。 这样的方式堆栈的大小取决于函数的嵌套调用的数量。 另外,在一个函数被调用并完成了它正在做的事情之后,它将以与被调用之前完全相同的状态离开堆栈! 这样,任何函数都可以在堆栈中操作,而忽略其他函数如何操作。
最后,你应该知道,还有其他的术语用于相似的概念。 例如一个堆栈可以被称为堆。 也有这些概念的混合版本,例如双端队列可以同时作为一个堆栈和一个队列,因为它可以被两端同时访问。 此外,数据结构作为堆栈或队列提供给您的事实并不一定意味着它是这样实现的,还有一些情况下数据结构可以作为任何东西实现并作为特定数据结构只是因为它可以被做成像这样的行为。 换句话说,如果你为任何数据结构提供了一个push和pop方法,它们就会变成堆栈了!