Tracks
/
8th
8th
/
Ejercicios
/
Búfer circular
Búfer circular

Búfer circular

Intermedia

Instrucciones

Un búfer circular, búfer cíclico o búfer en anillo es una estructura de datos que usa un único búfer de tamaño fijo como si estuviera conectado de extremo a extremo.

Un búfer circular comienza vacío y con una longitud predefinida. Por ejemplo, este es un búfer de 7 elementos:

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

Supón que se escribe un 1 en el medio del búfer (la ubicación exacta de inicio no importa en un búfer circular):

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

Luego supón que se agregan dos elementos más, 2 y 3, que quedan después del 1:

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

Si después se eliminan dos elementos del búfer, se eliminan los valores más antiguos que hay dentro de él. Los dos elementos eliminados, en este caso, son 1 y 2, y dejan el búfer con solo un 3:

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

Si el búfer tiene 7 elementos, entonces está completamente lleno:

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

Cuando el búfer está lleno se generará un error que le avisa al cliente que las escrituras posteriores están bloqueadas hasta que se libere un espacio.

Cuando el búfer está lleno, el cliente puede optar por sobrescribir los datos más antiguos con una escritura forzada. En este caso, se agregan dos elementos más, A y B, que sobrescriben el 3 y el 4:

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

El 3 y el 4 han sido reemplazados por A y B, lo que hace que 5 sea ahora el dato más antiguo del búfer. Por último, si se eliminan dos elementos, lo que se devolvería es 5 y 6, lo que da como resultado el búfer:

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

Como hay espacio disponible, si el cliente vuelve a usar la sobrescritura para guardar C y D, se usará el espacio donde antes se guardaron 5 y 6, y no la ubicación de 7 y 8. El 7 sigue siendo el elemento más antiguo y el búfer vuelve a estar lleno.

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

Este ejercicio presenta un par de conceptos que quizá no hayas visto antes:

Espacio de nombres definido por el usuario

Las palabras en 8th pertenecen todas a un espacio de nombres; por ejemplo, a:new se refiere a la palabra new del espacio de nombres a. También puedes definir espacios de nombres personalizados, que es lo que hacemos al inicio del archivo circular-buffer.8th:

ns: cb

Esto significa que puedes acceder a todas las palabras de ese archivo mediante cb:<word>, lo que es una excelente manera de agrupar funcionalidad relacionada.

Para más información, consulta la documentación de espacios de nombres.

Excepciones

Se espera que las palabras read y write lancen una excepción cuando se las llama sobre un búfer circular con un estado inválido. Para más información, consulta la documentación de excepciones y manejo de errores.

Objetos

Aunque eres libre de implementar el búfer circular como quieras, podrías considerar usar el soporte de objetos de 8th.


Fuente

WikipediaEl enlace se abre en una ventana o pestaña nueva
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
8th Exercism

¿Todo listo para empezar Búfer circular?

Regístrate en Exercism para aprender y dominar 8th con 70 ejercicios y mentoría humana real, todo gratis.

¡Profundiza en Búfer circular!

En este video echamos un vistazo al búfer circular: qué es, dónde se usa y distintas implementaciones, incluidas colas, arrays estáticos y dinámicos, estructuras de datos inmutables y una divertida implementación basada en agentes.