Un buffer circulaire est une structure de données utilisant un buffer de taille fixe et dont le début et la fin sont considérés comme connectés. Les buffers circulaires sont souvent utilisés pour gérer des flux de données ou pour implémenter un comportement de type FIFO.
Un buffer circulaire est vide au départ et a une longueur prédéterminée. Par exemple, un buffer de sept éléments :
Supposons que le nombre 1 est écrit à une position, arbitrairement définie comme position initiale :
Deux éléments supplémentaires — 2 & 3 — sont alors ajoutés après le 1 :
Si deux éléments sont alors retirés du buffer il s’agira des deux premiers éléments ajoutés. Ici, il s’agit de 1 et 2, le buffer ne contient alors plus que le 3 :
Si le buffer a 7 éléments, il est alors complètement rempli :
L'une des conséquences de l'utilisation d'un buffer circulaire est que lorsqu'il est plein et qu'un ajout supplémentaire est effectué, les données les plus anciennes sont écrasées.
Dans ce cas, deux éléments — A & B — sont ajoutés et écrasent le 3 et le 4 :
Il est aussi possible que la routine gérant le buffer ne laisse pas l'écrasement se produire et provoque une erreur lors de l'ajout de données supplémentaires ou qu'elle se charge automatiquement d'allouer l'espace nécessaire au stockage des nouveaux éléments.
Pour finir, si deux éléments sont alors retirés, les éléments obtenus ne seraient alors pas 3 et 4 mais 5 et 6, car A et B ont écrasé le 3 et le 4 ; laissant le buffer dans cet état :