Estructuras de Datos LinealesColas
También llamadas FIFO: First In First Out (Primero en Entrar, Primero en Salir).

Esta estructura puede compararse con la cola del cajero de un supermercado, donde los clientes son atendidos en el orden de llegada.

  Animación Flash de una cola

A continuación se muestra la especificación formal del tipo Cola

Especificación cola (elemento)
usa booleano
tipo cola
operaciones
crear: -> cola
encolar: cola  x  elemento -> cola
desencolar: cola -> cola
cabeza: cola -> elemento
vacía: cola -> booleano
errores 
desencolar (crear)
cabeza (crear)
ecuaciones " c Î cola, " e Î elemento
desencolar (encolar (crear, e)) = crear
no vacia (c) ==> desencolar (encolar (c, e)) = encolar (desencolar (c, e))
cabeza (encolar (crear, e)) = e
no vacia (c) ==> cabeza (encolar (c, e)) = cabeza (c)
vacía (crear) = cierto
vacía (encolar (c, e)) = falso
Fespecificación


Implementación por vectores

En este tipo de implementación la cola se implementa por medio de un vector circular, es decir a medida que se añaden y se borran elementos de la cola cuando se llega al final del vector se continua por el principio. Se utilizan además dos apuntadores, uno que señala la cabeza de la cola y otro que señala el final de ella. Para evitar confusiones cuando ambos apuntadores señalan a un mismo elemento, no sabiendo si es porque la cola está vacía o está llena, se añadirá un contador que dirá el número de elementos en la cola.

elems = = tabla [1..MAX] de elemento
cola = = tupla vector: elems
cab, col, número: entero
ftupla
función crear retorna cola
var c: cola fvar c.cab := 1
c.col := 1
c.numero := 0
retorna p
ffuncion

función encolar (ent c: cola, ent e: elemento) retorna cola

 
si c.número = MAX entonces Tratamiento_de_Error sino c.vector [c.cola] := e
c.cola := c.cola mod MAX + 1     {recorre circularmente la secuencia de números 1, 2, ..., MAX, 1, 2, ...}
c. número := c.número + 1
fsi
retorna p
ffuncion
Ejercicio: escribir la implementación por medio de vectores del resto de operaciones del TAD cola.

Puede verse fácilmente que que el tiempo de ejecución de las operaciones es de Q (1), por tanto es muy eficiente en ejecución, pero tiene el inconveniente de que hay que reservar un máximo de espacio de memoria para el vector, espacio que en muchos casos no se aprovecha.
 



  Autoría
Correo de contacto
Fecha de actualización