为什么我们在Java中使用堆栈和队列?

use*_*522 -5 java queue stack

我正在研究Java中数据结构的这一部分,而我仍然对如何使用它们而不是数据结构以及为什么要使用它们感到困惑。

小智 5

你去过自助餐厅吧?看到一堆盘子?将干净的盘子添加到堆栈中后,它​​放在顶部。卸下印版后,将从顶部卸下印版。因此,它称为后进先出(LIFO)。计算机堆栈就是这样,除了它可以容纳数字之外,您还可以根据需要从数组或列表中选出一个。(如果一叠板下面有一个弹簧,他们会说您“将”板“推”到顶部,而当您卸下一个板时,则将其“弹出”。这就是这些词的来源。)

在自助餐厅里,回去洗碗。他们有一条传送带,将要清洗的盘子放在一端,然后以相同的顺序从另一端出来。那是队列或先进先出(FIFO)。如果愿意,还可以从数组或列表中选择其中之一。

它们有什么用?好吧,假设您有一个树数据结构(除了倒置,它像一棵真正的木头树一样),并且您想编写一个程序来完全遍历它,以便打印出所有叶子。

一种方法是进行深度优先漫步。您从树干开始,转到第一个分支,然后转到该分支的第一个分支,依此类推,直到到达一片叶子并进行打印。但是,如何备份到下一个分支?好了,每次向下分支时,您都将“信息”“推入”堆栈中,当您备份时,将其“弹出”回去,这会告诉您接下来要执行哪个分支。这样一来,您就可以跟踪在每个点下一步要执行的分支。

另一种方法是广度优先的步行。从主干开始,对主干上的所有分支进行编号,然后将这些编号放入队列。然后,从另一端取出一个编号,转到该分支,然后从该分支中​​取出的每个分支再次编号(与第一个连续),然后将其放入队列。当您继续执行此操作时,您将首先访问距离树干1个分支的分支。然后,您将访问距离主干2个分支的所有分支,依此类推。最终,您将到达叶子并可以打印它们。

这是编程中的两个非常基本的概念。[已复制]