Cola

Otra estructura muy útil para resolver problemas es la que es del tipo FIFO, en este caso, la cola.

Origen de su nombre

El acrónimo FIFO significa First In First Out, que podemos traducir como el primero en entrar es el primero en salir. Típicamente se le llama cola, que es como una fila de una tienda, cuando nos formamos, la primer persona que se formó es la primer persona que sale de la fila, pues es la primera en ser atendida.

Idea de funcionamiento

La idea general de este tipo de estructura es igual a la fila de la panadería, por ejemplo, donde la gente se forma una detrás de otra y van siendo atendidos conforme han llegado.

En una cola el primer elemento que ha ingresado es el primer elemento que será procesado.

Implementación de funcionamiento

Podemos visualizar nuestra formación, cola o fila, como un arreglo de gente, donde cada persona o dato, tiene una ubicación determinada, el primer dato o persona en procesar es el que se ha formado o ingresado primero. En base a esto podemos ir generando nuestro código con un arreglo (no dinámico) como sigue:

Donde el arreglo cola almacenará nuestros datos en la formación y la variable inicio será el índice que lleva el control de quién es el siguiente en ser atendido, es decir, como el inicio de la fila, y la variable fin llevará control de dónde se formará la siguiente persona. Este índice ha sido inicializado en 0, pues la primer persona que llegué se formará en la primer locación del arreglo, cuando una persona se haya formado, deberemos actualizar nuestro índice, para dejar todo listo para el siguiente dato. Como podemos visualizar los datos como uno detrás del otro, pondremos el siguiente dato en la siguiente locación inmediata, por lo que por cada dato ingresado sólo hemos de desplazar el contador una unidad:

Como puedes ver, sólo hemos actualizado el índice que maneja el final de la cola, no el de inicio, pues el inicio sigue siendo la locación 0 en este ejemplo.

Cada que un dato entra no necesariamente significa que el primer dato haya sido procesado, por lo que el índice de inicio debe permanecer igual.

Además, nota que hemos utilizado el nombre convencional de push para la función que ingresa datos a nuestra estructura.

Para poder retirar un dato, lo que tenemos que hacer es actualizar nuestro indice que manera el inicio de la estructura, pues, para nuestro programa, los datos pertenecientes a la estructura son aquellos que se encuentran en las locaciones entre inicio y fin, si actualizamos nuestro inicio, estaremos dando por hecho que ese dato ya no pertenece a la estructura y que por lo tanto, lo podemos olvidar, además de actualizar y decir que el siguiente dato en ser procesado es el que se encuentra una unidad después. Nuestra función que elimina elementos de la cola será:

Como puedes notar, sólo actualizamos el índice de inicio y hemos utilizado el tradicional nombre para eliminar datos pop.

Otras funciones útiles

Otras funciones de nuestra pila que son muy útiles, son por ejemplo, consultar qué dato está en el inicio y en el fin de la estructura, esto lo podemos hacer así:

Con la función anterior, estaremos devolviendo el valor del próximo elemento en salir pero sin sacarlo de la estructura. Además, hemos utilizado el clásico nombre para acceder al elemento al frente de la estructura front.

La función anterior devuelve el último elemento que entró, se encuentra en la locación fin-1 puesto que en fin se encuentra la siguiente posición libre de la estructura. La última locación ocupada será una locación anterior, es decir fin-1. Además se ha utilizado el típico nombre en referencia a la última variable o la variable de hasta atrás de la estructura.

Para saber si la cola está vacía, podemos comparar nuestros índices de inicio y fin. Por ejemplo, en el inicio del uso de la estructura, tanto el fin como el inicio eran el mismo, pues no había ningún elemento en la estructura. Así podemos entender fácilmente que cuando el inicio apunte al mismo lugar que el fin, es que la cola está vacía, sin importar el valor que tengan.

Como puedes ver, podemos obtener mucha información sobre nuestra estructura utilizando los índices del inicio y del final. ¿Cómo obtendrías la cantidad de elementos almacenados en la estructura?

Limitaciones de esta implementación

Ventajas de esta implementación

Ejemplo completo

El ejemplo completo con todas las funciones citadas sería:

El código anterior produce como salida 20 50 40. Nota que el código anterior no es una implementación del todo eficiente, pues sólo aplica a una estructura, y de un sólo tipo. Una implementación más efectiva es utilizando clases o apuntadores.

Implementación efectiva

Generar varias estructuras de este tipo, es sencillo utilizando clases.

El código anterior produce como salida 20 2 y como puedes ver, cada fila tiene sus datos individuales.

Cita esta página

Include Poetry - Code. (2020, 4 de enero). Cola. Obtenido de https://www.include-poetry.com/Code/C++/Estructuras/Contenedores/Cola/

/* Comentarios */