Las colas son un conjunto de elementos caracterizadas porque las operaciones de inserción y borrado se realizan sobre extremos opuestos de la estructura. La inserción se produce en el «final», mientras que el borrado se realiza en el otro extremo, el «inicio». Las restricciones definidas para una cola hacen que el primer elemento que se inserta en ella sea, igualmente, el primero en ser extraido de la estructura. Si una serie de elementos A, B, C, D, E se insertan en una cola en ese mismo orden, entonces los elementos irán saliendo de la cola en el ordenen que entraron. Por esa razón son llamadas FIFO (First In First Out), es decir, “el primero que entra es el primero que sale”.

Las colas, al igual que las pilas, resultan de aplicación habitual en muchos problemas informáticos. Quizás la aplicación más común de las colas es la organización de tareas de un ordenador. En general, los trabajos enviados a un ordenador son «encolados» por éste, para ir procesando secuencialmente todos los trabajos en el mismo orden en que se reciben. Cuando el ordenador recibe el encargo de realizar una tarea, ésta es almacenada al final de la cola de trabajos. En el momento que la tarea que estaba realizando el procesador acaba, éste selecciona la tarea situada al principio de la cola para ser ejecutada a continuación. Todo esto suponiendo la ausencia de prioridades en los trabajos. En caso contrario, existirá una cola para cada prioridad. Del mismo modo, es necesaria una cola, por ejemplo, a la hora de gestionar eficientemente los trabajos que deben ser enviados a una impresora (o a casi cualquier dispositvo conectado a un ordenador). De esta manera, el ordenador controla el envio de trabajos al dispositivo, no enviando un trabajo hasta que la impresora no termine con el anterior.

COLA SIMPLE
Se inserta por un sitio y se saca por otro, en el caso de la cola simple se inserta por el final y se saca por el principio. Para gestionar este tipo de cola hay que recordar siempre cual es el siguiente elemento que se va a leer y cual es el último elemento que se ha introducido.

Implementación de Cola en SEED

Descripción
Estructura lineal dinámica, cuyo comportamiento es similar al de la Lista Simple con la restricción que solo inserta datos al final y que al eliminar solo elimina el primer nodo que se encuentre en la estructura ya que se rige por la propiedad de acceso a la información de tipo FIFO (Firts In, First Out; primero en entrar, primero en salir), está estructura se implementa en la clase Cola, adicionalmente a esto la estructura requiere de un elemento fundamental del almacenamiento de objetos denominado nodo, que es la base de su implementación, este elemento fue definido en la clase Nodo. Nodo es un elemento que esta compuesto por la información (elemento) almacenada y un apuntador al siguiente nodo, entendiendo por apuntador la dirección del nodo que le sigue.

La estructura Cola implementada, es un conjunto de nodos entrelazados entre sí, estructura que se origina con la creación de nodos a los que se le denomina “ini” (primer nodo de la Cola) y “fin” (ultimo nodo de la estructura definido como atributo por el programador para disminuir la complejidad de operaciones en la estructura), puntos de referencia para el desarrollo de los diversos procesos como lo son: la inserción de elementos se realiza modificando el nodo “fin” por el nuevo nodo creado, los elementos no están ordenados en la estructura. Al eliminar un objeto elimina el nodo definido como “ini” modificando el “ini” por el nodo siguiente. La implementación también permite conocer el tamaño, para esto se define un atributo llamado “tamanio” para controlar la cantidad de elementos que posee la Cola siendo este el tamaño de la estructura.

La implementación de la Clase Cola se ilustra en el siguiente diagrama de clase:

Requerimientos funcionales implementados:

RF1 – Crear una Cola.
RF2 – enColar datos en la Cola.
RF3 – deColar datos de la Cola.
RF4 – Consultar datos en la Cola.
RF5 – Conocer el tamaño de la Cola.
RF6 – Conocer los datos existentes en la Cola.

Implementación de un Simulador para Pila:
El Simulador posee las operaciones indicadas por su menú de opciones:

COLA DE PRIORIDAD
Las colas de prioridad es una extensión de la estructura de datos Cola. Se basan en el orden de salida de sus elementos: en el orden de llegada y orden de prioridad; así un elemento que ingresa a la cola se posicionará al final del segmento de elementos de su misma prioridad. Las colas de prioridad permiten alterar el orden de salida de los elementos de una cola:

  • no es necesario seguir un orden FIFO.
  • el orden se puede basar en una función de comparación.

Las operaciones de las colas de prioridad son las mismas que las de las colas con un comportamiento diferente. Una cola de prioridad es una cola a cuyos elementos se les ha asignado una prioridad, de forma que el orden en que los elementos son procesados sigue las siguientes reglas:

  • El elemento con mayor prioridad es procesado primero.
  • Dos elementos con la misma prioridad son procesados según el orden en que fueron introducidos en la cola.

Así, si tenemos que la prioridad más alta es 0, y la más baja es 3, la estructura se vería así:

La cola de prioridad cuenta con las mismas rutinas que la estructura de cola genérica, con la salvedad que al encolar elementos y desencolar elementos se debe de tomar en cuenta su prioridad para su posicionamiento.

Implementación de Cola con prioridad en SEED

Descripción
Estructura lineal dinámica, cuyo comportamiento es similar al de la Cola a diferencia que en esta estructura se asigna prioridad en los elementos almacenados, prioridad que se usa para insertar datos de forma descendente (de mayor a menor) en la estructura con el fin que al eliminar elimina el objeto de mayor prioridad que se encuentra en el inicio de la Cola, está estructura se implementa en la clase ColaP, adicionalmente a esto la estructura requiere de un elemento fundamental de almacenamiento de objetos denominado nodo que es la base de su implementación, este elemento fue definido en la clase NodoP. NodoP es un elemento que esta compuesto por la información (elemento) almacenada, un apuntador al siguiente nodo, entendiendo por apuntador la dirección del nodo que le sigue y una “prioridad” para otorgar a cada elemento dicho valor, la prioridad de los elementos dentro de la ColaP se ha decidido que sea de tipo entero (aunque pueden existir de otro tipo) de manera que sea más sencilla de implementar.

La estructura ColaP implementada es un conjunto de nodos entrelazados entre si, estructura que se origina con la creación de un NodoP al que se le denomina se le denomina “ini” (primer nodo de la Cola) y “fin” (ultimo nodo de la estructura definido como atributo por el programador para disminuir la complejidad de operaciones en la estructura), atributos que se utilizan como punto de referencia para el desarrollo de los diversos procesos como lo son: Insertar en este proceso la posición del nuevo elemento depende de la prioridad que posea de manera que los elementos están organizados de forma ascendente por su prioridad, al eliminar un objeto elimina al de mayor prioridad que siempre se encontrara en el inicio de la estructura modificando el apuntador “ini” por el nodo que le sigue. La implementación también permite conocer el tamaño, para esto se define un atributo llamado “tamanio” para controlar la cantidad de elementos que posee la ColaP siendo este el tamaño de la estructura.

La implementación de la Clase ColaP ilustrara en el siguiente diagrama de clase:

Requerimientos funcionales implementados:

RF1 – Crear una nueva Cola de Prioridad.
RF2 – Encolar datos en la nueva estructura.
RF3 – Decolar datos de la Cola.
RF4 – Consultar el dato que se encuentra en el inicio de la Cola.
RF5 – Consultar el dato que se encuentra en el final de la Cola.
RF6 – Conocer el tamaño de la Cola.
RF7 – Conocer los datos existentes en la Cola.

Implementación de un Simuladoolla:r para C
El Simulador posee las operaciones indicadas por su menú de opciones: