【问题标题】:Why is the (non-generic) Stack class implemented as a circular buffer? (and what does that mean exactly)?为什么(非泛型)Stack 类实现为循环缓冲区? (这到底是什么意思)?
【发布时间】:2013-06-02 02:16:51
【问题描述】:
非泛型 Stack 类声明“堆栈被实现为循环缓冲区。”
我不明白循环缓冲区在堆栈用例中的应用。我也不明白 如何 堆栈可以实现为循环缓冲区。
Wikipedia 这么说:
循环缓冲区的有用属性是它不需要在消耗一个元素时对其元素进行混洗。 (如果使用了非循环缓冲区,那么当一个元素被消耗时,就需要移动所有元素。)换句话说,循环缓冲区非常适合作为 FIFO 缓冲区,而标准的非循环缓冲区是非常适合作为 LIFO 缓冲区。
循环缓冲是一个很好的实现策略对于具有固定最大大小的队列。
那么...堆栈是如何实现为循环缓冲区的,为什么?
【问题讨论】:
标签:
.net
stack
circular-buffer
【解决方案1】:
我怀疑这是文档中的复制/粘贴/编辑错误;查看反射器,它不是实现为循环缓冲区;例如 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;
请注意,它不使用任何类型的偏移/环绕 - 所以它实际上是 不 使用循环缓冲区。你的直觉看起来是对的,但文档看起来不对。