2013-06-06 10 views
5

Gli stati di classe non generici Stack "Stack è implementato come buffer circolare".Perché la classe di stack (non generica) implementata come un buffer circolare? (e cosa significa esattamente)?

Non capisco l'applicazione di un buffer circolare a un caso di utilizzo di Stack. Non capisco anche come lo stack potrebbe essere implementato come buffer circolare.

Wikipedia dice questo:

La proprietà utile di un buffer circolare è che non ha bisogno di avere i suoi elementi mescolate in giro quando si è consumato. (Se si utilizza un buffer non circolare, sarebbe necessario spostare tutti gli elementi quando ne viene consumato uno.) In altre parole, il buffer circolare è adatto come buffer FIFO mentre un buffer standard non circolare è adatto come buffer LIFO.

Il buffering circolare rappresenta una buona strategia di implementazione per una coda che ha una dimensione massima fissa.

Quindi ... come viene implementato lo stack come buffer circolare e perché?

risposta

4

Sospetto che sia un errore di copia/incolla/modifica nella documentazione; guardando nel riflettore, è non implementato come un buffer circolare; per esempio spinta è (dopo il codice di ridimensionamento) fondamentalmente:

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

peek è:

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

e pop è:

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

Nota non utilizza alcun tipo di compensazione/wrap-around - quindi è non che utilizza effettivamente un buffer circolare. Il tuo istinto sembra giusto, ma la documentazione sembra sbagliata.

+0

Grazie Marc. Avrei dovuto solo guardare nel riflettore. :-) – richard

Problemi correlati