【问题标题】:Circular buffers (start value gets removed, what happens?)循环缓冲区(开始值被删除,会发生什么?)
【发布时间】:2012-05-10 22:46:55
【问题描述】:

我正试图了解循环/环形缓冲区,但我有点卡在一个问题上。

如果我有如下线性队列:

66、   20、     30、     40、     19、     空槽
0         1         2         3         4         5

正面:0(为66),背面:5,长度:5

如果一个值被删除(考虑到 0 是第一个被添加的,我相信 0(即 66)会被删除。

我的问题:那么 20 会成为队列中的第一个吗?之后的布局会如何?任何东西都会移动,例如索引/指针,或任何类似性质的东西?

谢谢。

【问题讨论】:

    标签: arrays queue circular-buffer


    【解决方案1】:

    是的。你会有类似下面的东西:

    __   20   30   40   19   __
    0    1    2    3    4    5
    

    正面:1,背面:5,长度:4

    请注意,您甚至可以将“66”留在位置 0(无需“擦除”它),这是大多数实现所做的。队列中的第一个项是“前”索引所指向的项,不一定是数组中支持队列的第一项。

    【讨论】:

    • 谢谢,这回答了我的问题。我能找到的唯一特定资源是维基百科。还有什么可以更深入地解释循环缓冲区的吗?还是循环缓冲区没有那么复杂,维基百科充分涵盖了该主题?
    • 维基百科上的描述还算不错。循环缓冲区并不那么复杂 - 主要是带有指向下一个和下一个元素的指针的数组。
    【解决方案2】:

    是的,然后 20 将在队列中。您的其他问题取决于实施。如果以这种方式编码,事情可能会发生变化;然而,这基本上违背了循环缓冲区的目的。在最正常的实现中,只有头部和尾部指针会移动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      相关资源
      最近更新 更多