我长期以来一直面临着这个问题。很少有作者说堆栈和队列是线性数据结构,很少是非线性的。哪一个是正确的,为什么?
在维基百科中,给出队列是线性数据结构。我也相信它们是线性的,因为没有像树木一样的转移。然而,在尝试在线测试时,它被覆盖了,说这些都是非线性的。
请准确回答我,这是真的,为什么。
答案 0 :(得分:3)
这里的“线性”是什么意思?它们当然既不是圆形也不是球形。
此外,答案取决于您正在谈论的堆栈/队列。
您的意思是“连续”吗?
如果您的意思是std::stack
和std::queue
(然后请从您的问题中删除“C”代码),那么它仍然取决于。它们都是容器适配器,这意味着可以将底层实现指定为模板参数。默认情况下,std::stack
和std::queue
构建于std::deque
- 不保证是连续的。
对于其他一些任意容器规范,它将取决于。
您的意思是“序列”吗?
标准C ++ has three sequence containers:std::vector
,std::list
和std::deque
。这意味着std::stack
/ std::queue
本身不是序列容器,但其实现可能,具体取决于您选择的那个。
希望有所帮助。
答案 1 :(得分:1)
这取决于!队列/堆栈可以是线性的,如FIFO和LIFO的情况,但是在优先级队列的情况下它可以是非线性的,例如,服务元素取决于您指定的某个参数!
所以,两者都可以是真的!这一切都取决于您如何实施您正在使用的数据结构!
但是,很可能堆栈被认为是线性的,队列可以是两者,链表和树是非线性的。
答案 2 :(得分:0)
对我来说,队列或堆栈只是一个规范。实施可能会有所不同。
答案 3 :(得分:0)
要么是真的。单词“stack”和“queue”仅定义允许的访问模式,而不是实现细节。例如,您可以将其实现为链接列表。
答案 4 :(得分:0)
线性数据结构与其实现细节或其内存模型无关。它只是意味着它的所有元素都有它的前面或后面,排除头部和尾部。不像树或格拉格。
班轮数据结构包括队列,堆栈。
如果有人错误地将衬垫用作“连续记忆”,他/她就错了。