对于基于循环缓冲区的队列来说,什么是一个好名字,它在完整时覆盖旧数据?

时间:2016-10-21 03:55:21

标签: data-structures computer-science

我需要帮助为基于循环缓冲区的队列选择一个好名称,覆盖旧数据,从而提供无限存储。

如果我仅将其命名为Queue,它就不会传达重要的细节,即当存储空间已满并将更多项目输入其中时,它会覆盖旧数据。"

一般来说,只有单词Queue表示具有有限存储空间的FIFO结构。所以,我创建了一个有限的存储FIFO队列,但是基于一个循环缓冲区,只是称它为Queue

现在,我想命名这个内部具有有限存储循环缓冲区的无限存储队列,但如果队列已满并且推入了新数据,它会覆盖旧数据。

以下是我内心的辩论:

竞争者: CircularBuffer / CyclicBuffer 想法:不,好吧,可能是。但我不应该告诉他们这是一个队列吗?循环缓冲区是否用于除队列之外的任何其他内容?此外,这是一个实施细节。

竞争者: CircularBufferBasedQueue 的Eee!呸!不!

竞争者: CircularBufferQueue 想法:错误的英语,但原谅这个小小的异常,效果很好。理想情况下,在.NET框架中,如果有这样的实现,它将位于单独的命名空间下,但名称只有Queue(或System.Collections.CircularBuffer.Queue),表明它基于它的实现细节离开循环缓冲区(如果有许多其他数据结构基于此,就像我们有SpecializedCollectionsConcurrentCollectionsCollections.Generic等,或者如果队列是只有一个使用循环缓冲区的候选者,它将被称为CircularBufferQueueCircularBufferedQueue(不确定添加那个 ed 对该词的含义做了什么)。

对于以CircularBufferXXX开头的任何名称,我还有一个问题是,拥有循环缓冲区是一个实现细节,因此不应该是名称的一部分。这就像说ArrayBasedLinkedList

但是再一次,使用循环缓冲区也传达了重要的行为,而不仅仅是实现存储细节。这种行为,如果仅留在阅读文档的数据结构的用户的危险中,可能是生与死或良好代码与错误代码之间的差异。

竞争者: InfiniteStorageQueue 思考:误导。存储不是无限的。它只是覆盖旧数据,因此您可以继续写作而不必担心会遇到死胡同。

如果我将其命名为InfiniteStorageQueue,那么我是否应该将常规队列命名为FiniteStorageQueue。呸!这看起来并不合适。

您如何对此数据结构进行分类?

1 个答案:

答案 0 :(得分:2)

您的描述听起来像直接循环缓冲区的定义,我不确定为什么这个唯一的命名。我会称之为CircularBuffer。为什么?

  1. 循环缓冲区定义为具有固定大小。
  2. 循环缓冲区实现为队列数据结构。
  3. 标准化名称易于理解和搜索。
  4. 但是,如果您确实想要一个新名称,我会选择OverwritingCircularBuffer。为什么?

    1. 我们知道它是一个循环缓冲区,因此它是固定大小的。
    2. 我们知道它会覆盖名称中的数据。
    3. 我们知道它将是一个队列数据结构。
    4. 然后当然添加一些漂亮的评论,解释它是如何工作的以及它的内存分配大小。 :)