【问题标题】:Stacks and Queues are linear data structure or non linear data structure?堆栈和队列是线性数据结构还是非线性数据结构?
【发布时间】:2011-03-11 21:44:37
【问题描述】:

我很长时间以来一直面临这个问题。很少有作者说堆栈和队列是线性数据结构,很少是非线性的。哪一个是对的,为什么?

在维基百科中,队列是线性数据结构。我也相信它们是线性的,因为没有像树木那样的转移。然而,在尝试在线测试时,它被覆盖说这些是非线性的。

请准确回答我,这是真的,为什么。

【问题讨论】:

  • 好的,现在你能澄清一下你所说的线性数据结构是什么意思吗?你做了哪些在线测试?
  • 取决于什么样的队列。 FIFO 队列是线性的,而优先级队列不是(至少,如果它的实现是为了保持基本操作的快速性,则不是)。但是,如果您愿意,FIFO 队列和堆栈都可以使用优先级队列来实现。
  • 至少有两个 C++ 概念可以被视为“线性”,即“连续”概念和“序列”概念。它们会导致截然不同的答案。
  • @MSalters:C++ 标准对某些功能有复杂性要求。这是我看到标题时首先想到的。

标签: c++ c data-structures


【解决方案1】:

这里的“线性”是什么意思?它们肯定既不是圆形也不是球形。

此外,答案将取决于您所谈论的堆栈/队列。


您的意思是“连续”吗?

如果您的意思是std::stackstd::queue(请从您的问题中删除“C”标签),那么它仍然取决于。它们都是容器适配器,这意味着可以将底层实现指定为模板参数。默认情况下,std::stackstd::queue 建立在 std::deque 之上——保证是连续的。

对于其他一些任意的容器规范,这将取决于。


你是说“序列”吗?

标准 C++ has three sequence containersstd::vectorstd::liststd::deque。这意味着 std::stack/std::queue 本身并不是一个序列容器,但它的实现可能是,这取决于您选择哪个。


希望对您有所帮助。

【讨论】:

    【解决方案2】:

    这取决于!队列/堆栈可以像 FIFO 和 LIFO 一样是线性的,但是在优先级队列的情况下它可以是非线性的,例如,为元素提供服务取决于您指定的某些参数!
    所以,两者都可能是真的!这完全取决于您如何实现所使用的数据结构!
    但是,很可能堆栈被认为是线性的,队列可以是线性的,链表和树是非线性的。

    【讨论】:

      【解决方案3】:

      对我来说,队列或堆栈只是一个规范。实施可能会有所不同。

      【讨论】:

        【解决方案4】:

        两者都可能是真的。 “堆栈”和“队列”这两个词只定义了允许的访问模式,而不是实现细节。例如,您可以将任一实现为链表。

        【讨论】:

          【解决方案5】:

          线性数据结构与其实现细节或内存模型无关。它只是意味着它的所有元素都有它的前面或后面,不包括头和尾。不像一棵树或格拉。

          Liner 数据结构包括队列、堆栈。

          如果有人误将衬里用作“继续记忆”,那他/她就错了。

          【讨论】:

            猜你喜欢
            • 2015-08-09
            • 1970-01-01
            • 1970-01-01
            • 2020-07-08
            • 1970-01-01
            • 2017-09-07
            • 2019-05-25
            • 1970-01-01
            • 2019-12-10
            相关资源
            最近更新 更多