Alo*_*kin 40 queue stack data-structures
为什么以及何时应该使用堆栈或队列数据结构而不是数组/列表?你能否请一个例子说明一个状态,如果你使用堆栈或队列会更好?
Mik*_*vey 57
你去过一家自助餐厅吧?看到一堆盘子?当将干净的板添加到堆叠中时,将其放在顶部.当移除板时,将其从顶部移除.所以它被称为后进先出(LIFO).计算机堆栈就是这样,除了它包含数字,如果你愿意,你可以从数组或列表中创建一个.(如果一叠盘子下面有一个弹簧,他们会说你"推"一个弹簧在顶部,当你移开一个弹簧时,你将它"弹出"它.这就是那些单词来自的地方.)
在自助餐厅,回去,在那里洗碗.它们有一条传送带,它们将板材放在一端进行清洗,然后它们以相同的顺序从另一端出来.这是一个队列或先进先出(FIFO).如果您愿意,也可以从数组或列表中创建其中一个.
它们有什么用?好吧,假设你有一个树数据结构(它就像一棵真正的木头,除了它是颠倒的),你想写一个程序完全走过它,以便打印出所有的叶子.
一种方法是进行深度优先步行.从树干开始,然后转到第一个分支,然后转到该分支的第一个分支,依此类推,直到找到一个叶子并打印出来.但是你如何备份到下一个分支?好吧,每当你走下一个分支时,你就会"推送"你堆栈中的一些信息,当你备份时,你会"弹出"它,然后它会告诉你下一个分支.这就是你如何跟踪每个点下一个分支.
另一种方式是广度优先行走.从主干开始,对主干上的所有分支进行编号,并将这些数字放入队列中.然后你把一些从另一端,去那个分支,每一个分支脱落的它,你又数点(连续与第一),并把那些在队列中.当你继续这样做时,你将首先访问离树干一分支的树枝.然后你将访问距离行李箱2个分支的所有分支,依此类推.最终你会到达树叶,你可以打印它们.
这是编程中的两个非常基本的概念.
Pau*_*sik 42
因为它们以比数组和列表更特定的方式帮助管理数据.
队列是先进先出(FIFO)
堆栈是最后一个,先出(LIFO)
数组和列表是随机访问.它们非常灵活,也容易腐败.如果您想将数据作为FIFO或LIFO进行管理,最好使用那些已经实现的集合.
Kal*_*see 16
当您想在数据结构上强制使用某种使用模式时.这意味着当你调试问题时,你不必怀疑是否有人将一个元素随机插入到列表中间,弄乱了一些不变量.
小智 7
堆
从根本上说,每当您需要倒档并在恒定时间内获取元素时,请使用堆栈。堆栈遵循 LIFO,它只是一种排列数据的方式。
应用:
队列:
队列使用先进先出 (FIFO) 原则实现
应用:
除了其他人已经提到的使用实施之外,还存在性能问题.如果要从数组或List(ArrayList)的开头删除某些内容,通常需要O(n)时间,但对于队列,则需要O(1)时间.如果有很多元素,这会产生巨大的差异.
小智 5
数组/列表和堆栈/队列不是互斥的概念.事实上,您找到的任何堆栈或队列实现几乎肯定都在使用数组或列表.
数组和列表结构提供了数据存储方式的描述,并保证了结构上基本操作的复杂性.
堆栈和队列提供了有关如何插入或删除元素的高级描述.队列的FIFO,堆栈的FILO.
例如.如果要实现消息队列,则将使用队列.但是队列本身可以将每个消息存储在列表中."推送"添加到列表前面的消息,"弹出"从列表末尾开始的消息.
| 归档时间: |
|
| 查看次数: |
46206 次 |
| 最近记录: |