Parcours
/
8th
8th
/
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]

Cet exercice introduit quelques concepts que tu n'as peut-être jamais rencontrés :

Espace de noms personnalisé

En 8th, chaque mot appartient à un espace de noms : par exemple, a:new fait référence au mot new de l'espace de noms a. On peut aussi définir des espaces de noms personnalisés, ce que l'on fait en haut du fichier circular-buffer.8th :

ns: cb

Cela signifie que tous les mots de ce fichier sont accessibles via cb:<word>, ce qui est un excellent moyen de regrouper des fonctionnalités liées.

Pour plus d'informations, consulte la documentation sur les espaces de noms.

Exceptions

Les mots read et write doivent tous deux lever une exception lorsqu'ils sont appelés sur un tampon circulaire dont l'état est invalide. Pour plus d'informations, consulte la documentation sur les exceptions et la gestion des erreurs.

Objets

Même si tu es libre d'implémenter le tampon circulaire comme tu le souhaites, tu pourrais envisager d'utiliser le support des objets de 8th.


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
8th Exercism

Prêt à commencer Tampon circulaire ?

Inscris-toi sur Exercism pour apprendre et maîtriser 8th avec 70 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.