Colas

Las colas son similares a los arrays dinámicos. Básicamente son arrays con un principio y un final, y que tienen funciones para poder “crecer” o “decrecer” tanto por el principio como por el final.

La sintaxis de la declaración de cola es igual a la de un array pero se indica el tamaño con el signo dólar ($),que indica el último elemento

Opcionalmente se puede poner un máximo para ese tamaño, en la forma [$:max_tamaño]

Ejemplos de declaraciones

Ejemplos de operaciones

Métodos predefinidos

Función Parámetros Resultado
size() Devuelve tamaño
insert() índice y elemento Inserta elemento en la posición indicada
delete() índice Borra elemento de la posición indicada . Si no se indica índice, borra toda la cola
pop_front() Devuelve y elimina el primer elemento:
e = Q.pop_front() // equivalente a
e = Q[0]; Q = Q[1,$];
pop_back() Devuelve y elimina último elemento:
e = Q.pop_back() //equivalente a
e = Q[$]; Q = Q[0,$-1];
push_front() elemento Inserta elemento al principio Q.push_front(e)// equivalente a
Q = {e,Q};
push_back() elemento Inserta elemento al final Q.push_back(e) //equivalente a
Q = {Q,e};

Aplicaciones

Con las colas se soluciona la creación de FIFOs y LIFOs para simulación. No es necesario crear punteros, detección de cuando se llena o vacía la cola, etc. Todo lo integra ya el lenguaje.

El tamaño máximo de cola puede ser muy interesante para simulación. De otra manera si la simulación se desmanda puede ocurrir que la cola termine ocupando toda la memoria de la máquina de simulación.

Por ejemplo en la siguiente figura utilizamos una FIFO para, suponiendo que queremos comparar el resultado de un diseño con un modelo ideal (EMULADOR), podamos olvidarnos de la latencia existente en el diseño bajo test.

Simulación de una cola

Si deseamos ver una simulación del funcionamiento de las colas podemos fijarnos el siguiente vídeo que simula el código que se adjunta a continuación.

Laboratorio virtual

En este laboratorio vamos a modelizar una FIFO ideal mediante colas y a simular sus diferentes casos