【问题标题】:stack vs queuing?堆栈与排队?
【发布时间】:2011-04-19 17:30:45
【问题描述】:

你好,我还是个学生,我对堆叠和排队有点困惑? 第一个问题是,

  1. 两者的主要区别是什么?

  2. 顺便说一句,除了普通排队之外还有循环排队,那怎么样?他们是如何工作的?有什么不同的排队方式吗?

  3. 我正在使用 php,是否有一个简单(非常简单或易于阅读)的示例代码可供我学习(链接也可以。)?

  4. 有pop、push等(stacking和queuing),php中有类似的吗?

非常感谢您的关注。

【问题讨论】:

  • 感谢您是一名学生,但您确实应该能够轻松搜索并找到这些问题的答案。
  • @noon - 也许他有,但他已经在 StackOverflow 上问了 30 多个问题,所以他必须相信给出的答案的质量。
  • @kev 谢谢 :) 堆栈只需用更少的时间给我很好的答案。它越来越令人上瘾:(。无论如何,质量真的很重要,它是一个社区 + wiki。

标签: php stack queue


【解决方案1】:

1:使用堆栈时,插入/删除操作都在数据结构的同一端工作(顶部)

使用队列,插入发生在一端(后部),而移除发生在另一端(前部)。

(两张图片均来自各自的维基百科条目)

2:见http://en.wikipedia.org/wiki/Circular_buffer

3:和 4:见 SplStackSplQueue

【讨论】:

    【解决方案2】:

    在 php 中,您将使用 array() 来保存堆栈和队列的数据,并使用 array_* 函数来操作它们。看看array functions at php.net

    你有

    • array_push - 在数组末尾添加一个新元素
    • array_pop - 从数组末尾删除一个元素
    • array_shift - 从数组的开头删除一个元素
    • array_unshift - 将一个新元素放在数组的开头。

    • 对于堆栈,您可以使用 array_push 和 array_pop

    • 对于队列,您可以使用 array_push 和 array_shift

    我将作为独立对象实现的循环缓冲区。

    【讨论】:

      【解决方案3】:

      您似乎被引导到先进先出队列和后进先出队列之间的区别。堆栈是前者,循环队列是后者的有效实现。

      1. stack 是一个 LIFO(后进先出)队列。

      2. 您可以使用circular queue - 这些在通信接口缓冲区上最常见,因为它们的内存有限,数据异步进入,并且 CPU 在不同时间读取数据。

        李>
      3. 如果您精通自己的语言,则可以使用任何语言创建队列。

      4. php website 提供了大量文档。

      【讨论】:

        【解决方案4】:

        stack 从同一端添加和删除项目。

        queue 将项目添加到后面并从前面删除项目(就像银行中的一条线。)

        有一个article about them both 用代码示例详细解释。

        circular buffer 的空间有限,并不断以循环方式添加项目,覆盖最后的项目。

        【讨论】:

          【解决方案5】:
          猜你喜欢
          • 1970-01-01
          • 2014-06-23
          • 1970-01-01
          • 2018-07-15
          • 2013-01-05
          • 2021-03-17
          • 2014-04-21
          • 2013-09-18
          • 1970-01-01
          相关资源
          最近更新 更多