Buffer Circular

Buffer Circular

Difícil

Instruções

Um buffer circular, buffer cíclico ou buffer em anel é uma estrutura de dados que usa um único buffer de tamanho fixo, como se estivesse ligado de ponta a ponta.

Um buffer circular começa vazio e com um determinado comprimento predefinido. Por exemplo, este é um buffer de 7 elementos:

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

Imagina que se escreve um 1 no meio do buffer (a localização inicial exata não importa num buffer circular):

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

Imagina agora que são acrescentados mais dois elementos, o 2 e o 3, que ficam depois do 1:

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

Se depois forem removidos dois elementos do buffer, são removidos os valores mais antigos que estão dentro dele. Os dois elementos removidos, neste caso, são o 1 e o 2, ficando o buffer apenas com o 3:

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

Se o buffer tiver 7 elementos, fica completamente cheio:

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

Quando o buffer está cheio, é gerado um erro que avisa o cliente de que novas escritas ficam bloqueadas até que fique uma fenda livre.

Quando o buffer está cheio, o cliente pode optar por sobrescrever os dados mais antigos com uma escrita forçada. Neste caso, são acrescentados mais dois elementos, o A e o B, que sobrescrevem o 3 e o 4:

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

O 3 e o 4 foram substituídos por A e B, o que faz do 5 o dado mais antigo do buffer. Por fim, se forem removidos dois elementos, o que seria devolvido é o 5 e o 6, dando origem ao buffer:

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

Como há espaço disponível, se o cliente voltar a usar a sobrescrita para guardar C e D, será usado o espaço onde o 5 e o 6 estavam guardados anteriormente, e não a posição do 7 e do 8. O 7 continua a ser o elemento mais antigo e o buffer volta a estar cheio.

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

Fonte

WikipediaO link abre numa nova janela ou separador
Editar via GitHub A ligação abre numa nova janela ou separador
TypeScript Exercism

Estás pronto para começar Buffer Circular?

Inscreve-te no Exercism para aprenderes e dominares TypeScript com 108 exercícios, e mentoria humana real, tudo grátis.

Mergulha a fundo em Buffer Circular!

Neste vídeo, vamos ver o Buffer Circular: o que é, onde é usado e diferentes implementações, incluindo filas, arrays estáticos e dinâmicos, estruturas de dados imutáveis e uma divertida implementação baseada em agentes.