Track
/
Delphi Pascal
Delphi Pascal
/
Esercizi
/
Buffer circolare
Buffer circolare

Buffer circolare

Medio

Istruzioni

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

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

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

Supponiamo che si scriva un 1 al centro del buffer (la posizione di partenza esatta non ha importanza in un buffer circolare):

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

Poi supponiamo che vengano aggiunti altri due elementi, 2 e 3, che si accodano dopo l'1:

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

Se poi si rimuovono due elementi dal buffer, vengono rimossi i valori più vecchi al suo interno. I due elementi rimossi, in questo caso, sono 1 e 2, e nel buffer resta solo il 3:

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

Se il buffer contiene 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 il 3 e il 4:

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

Il 3 e il 4 sono stati sostituiti da A e B, il che rende 5 il dato più vecchio del buffer. Infine, se si rimuovono due elementi, quelli restituiti sarebbero 5 e 6, e il buffer diventa:

[ ][ ][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 dove prima erano 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]

Fonte

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

Vuoi iniziare Buffer circolare?

Iscriviti a Exercism per imparare e padroneggiare Delphi Pascal con 76 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.