Parcours
/
Pharo
Pharo
/
Exercices
/
Tampon circulaire
Tampon circulaire

Tampon circulaire

Moyen

Instructions

Un tampon circulaire, aussi appelé tampon cyclique ou tampon en anneau, est une structure de données qui utilise un unique tampon de taille fixe comme s'il était relié de bout en bout.

Au départ, un tampon circulaire est vide et possède une longueur prédéfinie. Par exemple, voici un tampon de 7 éléments :

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

Supposons qu'un 1 soit écrit au milieu du tampon (l'emplacement de départ exact n'a pas d'importance dans un tampon circulaire) :

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

Supposons ensuite que deux éléments supplémentaires, 2 et 3, soient ajoutés à la suite du 1 :

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

Si on retire ensuite deux éléments du tampon, ce sont les valeurs les plus anciennes qu'il contient qui sont retirées. Les deux éléments retirés, ici, sont 1 et 2, ce qui ne laisse dans le tampon qu'un 3 :

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

Si le tampon contient 7 éléments, il est alors complètement plein :

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

Quand le tampon est plein, une erreur est levée pour avertir le client que les écritures suivantes sont bloquées jusqu'à ce qu'un emplacement se libère.

Quand le tampon est plein, le client peut choisir d'écraser les données les plus anciennes au moyen d'une écriture forcée. Dans ce cas, deux éléments supplémentaires, A et B, sont ajoutés et écrasent le 3 et le 4 :

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

3 et 4 ont été remplacés par A et B, ce qui fait désormais de 5 la donnée la plus ancienne du tampon. Enfin, si on retire deux éléments, ce sont 5 et 6 qui sont renvoyés, ce qui donne le tampon suivant :

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

Comme de la place est disponible, si le client utilise à nouveau l'écrasement pour stocker C et D, c'est l'emplacement où 5 et 6 étaient stockés auparavant qui sera utilisé, et non celui de 7 et 8. 7 reste l'élément le plus ancien et le tampon est de nouveau plein.

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

Implémentation

Pour les cas d'erreur pendant les opérations, consulte la hiérarchie des classes d'erreur (côté classe) pour savoir comment signaler une exception avec le message donné.


Source

WikipediaLe lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Pharo Exercism

Prêt à commencer Tampon circulaire ?

Inscris-toi sur Exercism pour apprendre et maîtriser Pharo avec 50 exercices, et un vrai mentorat humain, le tout gratuitement.

Analyse approfondie de Tampon circulaire !

Dans cette vidéo, on s'intéresse au tampon circulaire : ce qu'il est, où il est utilisé et différentes implémentations, notamment les files, les tableaux statiques et dynamiques, les structures de données immuables et une implémentation amusante à base d'agents.