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

时间:2017-07-06 10:26:20

标签: java stack queue

我正在研究java中的这部分数据结构,我仍然在混淆如何使用它们代替数据结构以及我为什么要使用它们?!

3 个答案:

答案 0 :(得分:5)

你来过自助餐厅,对吗?看到一堆盘子?当将干净的板添加到堆叠中时,将其放在顶部。当移除板时,将其从顶部移除。所以它被称为后进先出(LIFO)。计算机堆栈就是这样,除了它包含数字,如果你愿意,你可以从数组或列表中创建一个。 (如果一堆盘子下方有一个弹簧,他们会说你"一个推到顶部,当你移开一个时,你就会弹出它然后关闭。这就是你的位置。这些话来自。)

在自助餐厅,回去,洗碗的地方。它们有一条传送带,它们将板材放在一端进行清洗,然后它们以相同的顺序从另一端出来。这是队列或先入先出(FIFO)。如果您愿意,也可以从数组或列表中创建其中一个。

它们有什么用?好吧,假设你有一个树数据结构(它就像一个真正的木头,除了它是颠倒的),你想写一个程序完全走过它,以便打印出所有的叶子。

一种方法是进行深度优先行走。从树干开始,然后转到第一个分支,然后转到该分支的第一个分支,依此类推,直到找到一个叶子并打印出来。但是你如何备份到下一个分支?好吧,每次你去一个分店,你都会推动"你的堆栈中的一些信息,当你备份你的时候#pop; pop"它退出了,它告诉你下一个分支。这就是你如何跟踪每个点的下一个分支。

另一种方式是广度优先行走。从主干开始,对主干上的所有分支进行编号,并将这些数字放入队列中。然后你从另一端拿出一个数字,转到那个分支,并且对于每个分支,你再次对它们进行编号(连续第一个)并将它们放入队列中。当你继续这样做时,你将首先访问离树干一分支的树枝。然后你将访问距离行李箱2个分支的所有分支,依此类推。最终你会到达树叶,你可以打印它们。

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

答案 1 :(得分:0)

当您需要以先进先出/先进先出(分别)顺序处理数据时,可以使用队列和堆栈,并且您希望能够丢弃您轮询的所有项目处理后,队列/弹出堆栈。

当然你也可以使用ArrayList,但是你必须自己维护它并删除你自己处理的所有项目

您可以使用这些结构解决的逻辑问题示例:

另见这里的好答案: https://stackoverflow.com/a/17436821/2940903

答案 2 :(得分:0)

堆栈和队列的应用

  1. 堆栈(class Wish: NSObject { public var wishName : String? init(withWishName name: String) { super.init() wishName = name } } 设计人员喜欢检查平衡括号,)

  2. 队列-在处理Compiler

  3. 之类的HTTP请求中
相关问题