堆栈和队列是线性数据结构还是非线性数据结构?

时间:2011-03-11 12:15:05

标签: c++ c data-structures

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

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

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

5 个答案:

答案 0 :(得分:3)

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

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


您的意思是“连续”吗?

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

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


您的意思是“序列”吗?

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


希望有所帮助。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

要么是真的。单词“stack”和“queue”仅定义允许的访问模式,而不是实现细节。例如,您可以将其实现为链接列表。

答案 4 :(得分:0)

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

班轮数据结构包括队列,堆栈。

如果有人错误地将衬垫用作“连续记忆”,他/她就错了。