为什么(非泛型)Stack类实现为循环缓冲区? (这究竟是什么意思)?

时间:2013-06-06 07:13:30

标签: .net stack circular-buffer

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

我不明白将循环缓冲区应用于Stack用例。我也不明白如何将堆栈实现为循环缓冲区。

Wikipedia说:

  

循环缓冲区的有用属性是它不需要在消耗一个缓冲区时使其元素混乱。 (如果使用非循环缓冲区,那么当消耗一个元素时,有必要移动所有元素。)换句话说,循环缓冲区非常适合作为FIFO缓冲区,而标准的非循环缓冲区是非常适合作为LIFO缓冲区

     

循环缓冲为具有固定最大大小的队列提供了一个良好的实施策略

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

1 个答案:

答案 0 :(得分:4)

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

this._array[this._size++] = obj;
偷看是:

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

和pop是:

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

注意它不使用任何类型的偏移/环绕 - 因此实际上使用循环缓冲区。你的直觉看起来正确,但文档看起来不对。