【问题标题】:why is it a bad idea to use arrays as the data structure in a bounded Queue?为什么在有界队列中使用数组作为数据结构是个坏主意?
【发布时间】:2011-07-11 15:11:03
【问题描述】:

我正在考虑使用数组实现有界队列(容量固定)。然后我在有界队列上偶然发现了这个wiki-article。它提到:

数组效率低下是因为 将项目复制到前面所花费的时间 队列的

我不太明白这是怎么回事?当我们入队或出队时,我们只是将索引更新为头部或尾部。我们在哪里将项目复制到队列的前面?

【问题讨论】:

    标签: arrays algorithm data-structures queue


    【解决方案1】:

    没有复制 - 陈述不正确。如果你回顾这篇文章的历史,某人的代码实际上确实移动了所有项目,但是那个代码被你现在看到的版本替换了,并且错误的语句被留在了那里。那里的 C++ 代码中也至少有一个错误。在 enqueue() 中,条件 if(tail<head+QMAX) 永远不会失败,因为给定代码 tail 永远不会大于或等于 QMAX。

    【讨论】:

    • 我也这么觉得。很高兴知道我在正确的轨道上。当我们这样做时,将数组用于有界队列是否有任何缺点。 (假设,我负责下/溢出)?
    • 使用数组的唯一缺点是您将预先为整个队列分配空间,即使只使用了其中的一小部分。可以只分配一个小数组,然后随着它的增长重新分配,但重新分配可能需要将所有现有元素复制到新分配的内存中。使用链接结构可以完全避免这个问题,但它也有其自身的缺点,例如每个节点的空间开销更大。
    • 对 wiki 文章使用时间点引用(“永久链接”,如 en.wikipedia.org/w/…)的一个原因。今天显示的代码仍然使用pushshift,真正移动所有元素的操作。由于文章没有提到环形缓冲区,我认为它的质量很差。
    猜你喜欢
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2012-08-22
    相关资源
    最近更新 更多