5

非泛型Stack类声明“堆栈被实现为循环缓冲区”。

我不了解循环缓冲区在 Stack 用例中的应用。我也不明白如何将堆栈实现为循环缓冲区。

维基百科是这样说的:

循环缓冲区的有用属性是它不需要在消耗一个元素时对其元素进行混洗。(如果使用非循环缓冲区,则需要在消耗一个元素时移动所有元素。)换句话说,循环缓冲区非常适合作为 FIFO 缓冲区,而标准的非循环缓冲区非常适合作为一个后进先出缓冲器

对于具有固定最大大小的队列,循环缓冲是一种很好的实现策略。

那么......堆栈是如何实现为循环缓冲区的,为什么?

4

1 回答 1

4

我怀疑这是文档中的复制/粘贴/编辑错误;查看反射器,它不是作为循环缓冲区实现的;例如 push 基本上是(在调整大小代码之后):

this._array[this._size++] = obj;

偷看是:

return this._array[this._size - 1];

流行是:

object value = this._array[--this._size];
this._array[this._size] = null;
return value;

请注意,它不使用任何类型的偏移/环绕 - 所以它实际上并没有使用循环缓冲区。您的直觉看起来是正确的,但文档看起来是错误的。

于 2013-06-06T07:25:16.923 回答