Tipos de Datos Abstractos TDA COLA Representación de una cola
La estructura de datos COLA Su nombre se deriva de la metáfora de una cola de personas en una taquilla. La inserción y extracción de elementos de la cola siguen el principio FIFO (first-in-firstout). El elemento con más tiempo en la cola es el que puede ser extraído. cola frente Entra Sale
Definición y Conceptos Básicos Una COLA es otro tipo especial de Lista en el cual los elementos se insertan en un extremo (el posterior) y la supresiones tienen lugar en el otro extremo denominado anterior o frente, dicho de otra forma, la operación de inserción push se realiza por un extremo y la operación de extracción pop por el otro.
Diferencia de colas y pilas en el modo entrada/salida. En las colas se realizan las inserciones al de la lista, no al principio. Por eso, se usan para almacenar datos que necesitan ser procesados según el orden de llegada. C= C (1), C(2),..., C(N) Las eliminaciones se realizan al principio de la lista frente (front), y las inserciones se realizan en el otro extremo (rear).
Operaciones básicas de colas Crear: se crea la cola vacía. Anula: Convierte la cola C en una lista vacía Frente (consultar, front): se devuelve el elemento frontal de la cola, es decir, el primero elemento que entró. Encolar (añadir, entrar, push): se añade un elemento a la cola. Se añade al de esta. Desencolar (sacar, salir, pop): se elimina el elemento frontal de la cola, es decir, el primer elemento que entró. Vacía: Devuelve verdadero si, y sólo si, C es una cola vacía.
Ejemplo a a a b a b a b c a b c b c b c No es necesario mover todos los elementos Apuntadores al frente y a la cola
Ejemplos de las colas La particularidad de una estructura de datos de cola es el hecho de que sólo podemos acceder al primer y al último elemento de la estructura. Así mismo, los elementos sólo se pueden eliminar por el principio y sólo se pueden añadir por el de la cola.
Implementación con arreglos Una cola es una colección ordenada de objetos. En C, los arreglos permiten almacenar colecciones ordenadas. Misma desventaja: los arreglos tienen tamaño fijo. Uso eficiente mediante un arreglo circular. #define QUEUESIZE 100 struct Queue{ int front; int rear; int nodes[queuesize]; }; struct Queue *create_queuek (struct Queue *ps) { ps = (struct Queue *) malloc(sizeof(struct Queue)); ps->front = 0; ps->rear = -1; return ps; } main(){ struct Queue *ps; ps=create_queue(ps); : }
Tipos de colas Tipos de colas: Colas de prioridad: En ellas, los elementos se atienden en el orden indicado por una prioridad asociada a cada uno. Si varios elementos tienen la misma prioridad, se atenderán de modo convencional según la posición que ocupen. Bicolas: son colas en donde los nodos se pueden añadir y quitar por ambos extremos; se les llama DEQUE (Double Ended QUEue). Para representar las bicolas lo podemos hacer con un array circular con Ini y Fin que apunten a cada uno de los extremos.
Tipos de colas Bicolas de entrada restringida: Son aquellas donde la inserción sólo se hace por el, aunque podemos eliminar al principio ó al. Bicolas de salida restringida: Son aquellas donde sólo se elimina por el, aunque se puede insertar al principio y al. Colas de prioridad: son aquellas que cumplen dos reglas: 1. De dos elementos siempre se atenderá antes al que tenga mayor prioridad. 2. Si dos elementos tienen la misma prioridad se atiende primero el que llego antes. Realización de colas basadas en apuntadores. Se mantiene un apuntador (o un cursor) al último elemento y e mantiene un apuntador al frente.
Colas circulares El objetivo de una cola circular es aprovechar al máximo el espacio del arreglo. La idea es insertar elementos en las localidades previamente desocupadas. La implementación tradicional considera dejar un espacio entre el frente y la cola. a b c d e f g frente cola e f g frente cola h i e f g cola frente
Aplicaciones de las colas En general, operaciones en redes de computadoras Trabajos enviados a una impresora Solicitudes a un servidor. Clientes solicitando ser atendidos por una telefonista Simulaciones de cualquier situación real en la que se presente una organización tipo cola
Aplicaciones de las colas Ejemplos de colas en la vida real serían: personas comprando en un supermercado, esperando para entrar a ver un partido de béisbol, esperando en el cine para ver una película, una pequeña peluquería, etc. La idea esencial es que son todos líneas de espera.
Ejemplo 1: Con las Operaciones básicas: insertar, quitar_primero y primero. Realiza el siguiente ejercicio de colas circulares. Recuerda que la implementación circular devuelve y fin al principio del vector cuando rebasan la ultima posición.
1. Crear_Cola (C) 2. Insetar_en_Cola (a,c) 3. Insetar_en_Cola (b,c) Solución: 4. Insetar_en_Cola (c,c) 5. Insetar_en_Cola (d,c) 6. Quitar_Primero (C) 7. Insetar_en_Cola (e,c)
1. Crear_Cola (C) 2. Insertar_en_Cola (a,c) 3. Insertar_en_Cola (b,c) 4. Insertar_en_Cola (c,c) Solución a a b a b c 5. Insertar_en_Cola (d,c) 6. Quitar_Primero (C) 7. Insertar_en_Cola (e,c) a b c d b c d e b c d
Ejemplo 2: Con las operaciones básicas de colas, llegar de la cola inicial A a la cola B : 1 2 3 4 5 6 7 8 9 A 2 4 6 8 1 3 5 7 9 B
1.- Crear_Cola(C). 2.- Quitar_Primero(A), Sacamos el 1 3.-Insertar_en_Cola(1,C), Insertamos el uno del paso anterior 4.- Quitar_Primero(A), Sacamos el 2 5.- Insertar_en_Cola(2,B), Metemos el 2 del paso anterior a la cola B 6.-Quitar_Primero(A), Sacamos el 3 7.- Insertar_en_Cola(3,C), Insertamos el 3 en C 8.- Quitar_Primero(A), Sacamos el 4 9.-Insertar_en_Cola(4,B), Insertamos el 4 en la cola B 10.- Quitar_Primero(A), Sacamos el 5 11.-Insertar_en_Cola(5,C), Insertamos el 5 en C 12.-Qutar_Primero(A),Sacamos el 6 13.-Insertar_en_Cola(6,B), Insertamos el 6 en B 14.-Qutar_Primero(A),Sacamos el 7 15.-Insertar_en_Cola(7,C), Insertamos el 7 en C 16.-Qutar_Primero(A),Sacamos el 8 17.-Insertar_en_Cola(8,B), Insertamos el 8 en B 18.-Qutar_Primero(A),Sacamos el 9 19.-Insertar_en_Cola(9,C), Insertamos el 9 en C 20.-Qutar_Primero(C),Sacamos el 1 21.-Insertar_en_Cola(1,B), Insertamos el 1 en B 22.-Qutar_Primero(C),Sacamos el 3 23.-Insertar_en_Cola(3,B), Insertamos el 3 en B 24.-Qutar_Primero(C),Sacamos el 5 25.-Insertar_en_Cola(5,B), Insertamos el 5 en B 26.-Qutar_Primero(C),Sacamos el 7 27.-Insertar_en_Cola(7,B), Insertamos el 7 en B 28.-Qutar_Primero(C),Sacamos el 9 29.-Insertar_en_Cola(9,B), Insertamos el 9 en B Solución:
EJERCICIO: Utilizando las operaciones de colas (Crear, insertar, quitar, etc.), escribe el procedimiento para llegar de la cola Inicial a la cola Final : 1 10 2 9 3 8 4 7 5 6 Inicial 10 9 8 7 6 5 4 3 2 1 Final