【问题标题】:Why do we use stack and queue in Java?为什么我们在 Java 中使用堆栈和队列?
【发布时间】:2017-07-06 10:26:20
【问题描述】:

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

【问题讨论】:

  • 1.你是什​​么意思“instad 数据结构”?它们是一种结构化数据的方法。 2.“我为什么要使用它们”
  • 我将这个问题作为离题投票,因为它与用户要求为他查找教程的任何类型的编程无关
  • 你的问题不清楚。但这也太笼统了;答案将是教科书章节。您被告知要使用哪些参考资料?参考文献中的哪一点是您被卡住的确切点?

标签: java stack queue


【解决方案1】:

你去过自助餐厅,对吧?看到一堆盘子了吗?当一个干净的盘子被添加到堆栈中时,它被放在上面。当一个盘子被移除时,它会从顶部被移除。所以它被称为后进先出(LIFO)。计算机堆栈就是这样,除了它包含数字,如果您愿意,您可以从数组或列表中创建一个。 (如果这叠盘子下面有一个弹簧,他们会说你“推”一个到顶部,当你移除一个时,你“弹出”它。这就是这些词的来源。)

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

它们有什么用?好吧,假设你有一个树的数据结构(它就像一棵真正的木头树,只是它是倒置的),你想编写一个程序来完全遍历它,从而打印出所有的叶子。

一种方法是进行深度优先步行。你从树干开始,到第一个分支,然后到那个分支的第一个分支,依此类推,直到你找到一片叶子,然后打印它。但是你如何备份到下一个分支呢?好吧,每次你下一个分支时,你都会在你的堆栈中“推送”一些信息,当你备份时,你会“弹出”它回来,这会告诉你接下来要走哪个分支。这就是您跟踪每个点下一步要执行哪个分支的方式。

另一种方式是广度优先步行。从主干开始,您对主干上的所有分支进行编号,并将这些编号放入队列中。然后你从另一端取出一个号码,去那个分支,对于每一个从它出来的分支,你再次给它们编号(与第一个连续)并将它们放入队列中。当你继续这样做时,你将首先访问距离树干 1 个分支的分支。然后您将访问距离树干 2 个分支的所有分支,依此类推。最终你会找到叶子并打印它们。

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

【讨论】:

    【解决方案2】:

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

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

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

    在这里也可以看到这个不错的答案: https://stackoverflow.com/a/17436821/2940903

    【讨论】:

      【解决方案3】:

      栈和队列的应用:

      1. 堆栈(Compiler 设计师喜欢检查平衡括号,)

      2. 队列 - 服务于 HTTP 请求,如 FIFO

      【讨论】:

        猜你喜欢
        • 2012-10-22
        • 2014-01-21
        • 2011-11-15
        • 2013-09-30
        • 2015-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-30
        相关资源
        最近更新 更多