Track
/
Pharo
Pharo
/
Esercizi
/
Buffer circolare
Buffer circolare

Buffer circolare

Medio

Istruzioni

Un buffer circolare, detto anche buffer ciclico o buffer ad anello, è una struttura dati che usa un unico buffer di dimensione fissa come se fosse collegato da un'estremità all'altra.

Un buffer circolare all'inizio è vuoto e ha una lunghezza predefinita. Ad esempio, questo è un buffer di 7 elementi:

[ ][ ][ ][ ][ ][ ][ ]

Supponi che venga scritto il valore 1 al centro del buffer (la posizione iniziale esatta non ha importanza in un buffer circolare):

[ ][ ][ ][1][ ][ ][ ]

Poi supponi che vengano aggiunti altri due elementi, 2 e 3, che vengono accodati dopo il valore 1:

[ ][ ][ ][1][2][3][ ]

Se poi vengono rimossi due elementi dal buffer, vengono rimossi i valori più vecchi presenti nel buffer. I due elementi rimossi, in questo caso, sono 1 e 2, lasciando nel buffer solo il valore 3:

[ ][ ][ ][ ][ ][3][ ]

Se il buffer ha 7 elementi, allora è completamente pieno:

[5][6][7][8][9][3][4]

Quando il buffer è pieno, viene generato un errore che avvisa il client che ulteriori scritture sono bloccate finché non si libera uno slot.

Quando il buffer è pieno, il client può scegliere di sovrascrivere i dati più vecchi con una scrittura forzata. In questo caso, vengono aggiunti altri due elementi, A e B, che sovrascrivono i valori 3 e 4:

[5][6][7][8][9][A][B]

3 e 4 sono stati sostituiti da A e B, rendendo ora 5 il dato più vecchio nel buffer. Infine, se vengono rimossi due elementi, quelli restituiti sarebbero 5 e 6, ottenendo il buffer:

[ ][ ][7][8][9][A][B]

Poiché c'è spazio disponibile, se il client usa di nuovo la sovrascrittura per memorizzare C e D, verrà usato lo spazio in cui erano stati memorizzati 5 e 6, non la posizione di 7 e 8. 7 è ancora l'elemento più vecchio e il buffer è di nuovo pieno.

[C][D][7][8][9][A][B]

Implementazione

Per i casi di errore durante le operazioni, consulta la gerarchia delle classi di errore (class side) per scoprire come segnalare un'eccezione con il messaggio specificato.


Fonte

WikipediaIl link si apre in una nuova finestra o scheda
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
Pharo Exercism

Vuoi iniziare Buffer circolare?

Iscriviti a Exercism per imparare e padroneggiare Pharo con 50 esercizi e il mentoring di persone reali, tutto gratis.

Approfondimento su Buffer circolare!

In questo video daremo un'occhiata ai buffer circolari: cosa sono, dove vengono usati e le diverse implementazioni, tra cui code, array statici e dinamici, strutture dati immutabili e una divertente implementazione basata su agenti.