2. Índice
◼ TDA Cola
◼ Definición y operaciones básicas
◼ Operaciones e implementación
◼ Aplicaciones
3. TDA COLA
Def: una cola es una lista ordenada de elementos en la que todas las
inserciones se realizan por un extremo (frente o principio) y las
supresiones se realizan por el otro (final).
Definición
Estructura FIFO (First In First Out): “primero en entrar primero
en salir”
6. Implementación con listas enlazadas
◼ Definición de tipos
ELEMENTO = T;
NODO = registro de
info: ELEMENTO;
sgte: puntero a NODO;
fin registro;
POSICION = puntero a NODO;
TDA COLA
COLA = registro de
tam: numerico;
prim, ult: POSICIÓN;
fin registro;
7. Implementación con listas enlazadas
◼ Operación QUEUE
Algoritmo QUEUE(C: cola, X: ELEMENTO, resp: lógico) es
temp: POSICION;
INICIO
Llena?(C,resp);
si resp = cierto entonces
Escribir “Cola llena”;
resp := falso;
sino {la cola no está llena, por lo que procedemos a añadir el elemento}
Obtener(temp);
temp →.info := X;
temp→.sgte := nil; {porque va a ser el último}
Vacía?(C,resp);
si resp = cierto entonces {será el primero}
C.prim := temp;
sino C.ult→.sgte := temp; {será el siguiente al último}
finsi;
C.ult := temp; {porque es el nuevo último elemento}
C.longitud := C.longitud + 1; {pues ahora hay un elemento más en la cola}
finsi;
FIN
TDA COLA
8. Implementación con listas enlazadas
◼ Operación DEQUEUE
Algoritmo DEQUEUE(C: cola, X: ELEMENTO, resp: lógico) es
temp: POSICION;
tam: numérico;
INICIO
Vacía?(C,resp);
si resp = cierto entonces
Escribir “Cola vacía”;
resp := falso;
sino
temp := C.prim;
E := temp→.info;
Tamaño(C,tam);
si tam = 1 entonces
C.ult := nil;
finsi;
C.prim := temp→.sgte; {si sólo había un elemento, será nil}
Liberar(temp);
C.longitud := C.longitud -1;
finsi;
FIN
TDA COLA
9. Implementación con vectores
◼ Si el principio de la cola es fijo en la primera posición del vector y el final es
variante para eliminar un elemento de la cola hay que desplazar todos los
demás una posición (Dequeue() es ineficiente).
◼ Si principio y final de la cola son variantes, no hacen falta desplazamientos.
◼ Problema: la cola puede desbordarse teniendo celdas libres.
TDA COLA
10. Implementación con vectores
◼ Solución: VECTOR CIRCULAR cuando algún índice llega al final, vuelve al
comienzo del vector
TDA COLA
Para saber si la cola está llena o
vacía, su tamaño se controla con el
campo tam del registro
◼ Definición de tipos
ELEMENTO = T;
COLA = registro de
prim, ult, tam: numérico;
arreglo: vector[1..MAX] de
ELEMENTO;
finregistro;
11. Implementación con vectores
◼ Operación QUEUE
Algoritmo QUEUE(C: COLA, X: ELEMENTO, resp: lógico) es
INICIO
Llena?(C,resp);
si resp = cierto entonces {la cola está llena}
Escribir “Cola llena”;
resp := falso;
sino {la cola no está llena, por lo que procedemos a añadir el elemento}
C.ult := (C.ult + 1) mod MAX; {hacemos que ult avance de forma circular}
C.arreglo[C.ult] := X;
C.tam := C.tam +1; {pues ahora hay un elemento más en la cola}
finsi;
FIN
TDA COLA
12. Implementación con vectores
◼ Operación Dequeue
Algoritmo DEQUEUE(C: COLA, X: ELEMENTO, resp: lógico) es
INICIO
Vacía?(C,resp);
si resp = cierto entonces {la cola está vacía}
Escribir “Cola vacía”;
resp := falso;
sino {hay al menos un elemento}
X := C.arreglo[C.prim];
C.prim := (C.prim + 1) mod MAX;
C.longitud := C.longitud -1;
finsi;
FIN
TDA COLA
13. Aplicaciones de las colas
Principalmente: gestión de recursos
◼ Sistemas de tiempo compartido: los recursos (CPU, memoria, …) se
asignan a los procesos que están en cola de espera en el orden en el
que fueron introducidos.
◼ Colas de impresión: al intentar imprimir varios documentos a la vez o la
impresora está ocupada, los trabajos se almacenan en una cola según
el orden de llegada.
◼ Simulación por computadora de situaciones reales: una cola de clientes
en un supermercado o el tiempo de espera para ser atendidos por un
operador de una línea telefónica.
TDA COLA