Está en la página 1de 38

TDA Cola

Cola
Una cola es un TDA en la cual los nuevos elementos se agregan por el extremo final y los ya existentes se eliminan por el extremo inicial. De acuerdo a lo expuesto anteriormente podemos afirmar que los elementos se eliminan en el mismo orden en el cual se insertaron, es decir, el primer elemento que se agrega en la cola ser el primero en ser eliminado. Debido a esta caracterstica las Colas son tambin conocidas como estructuras de tipo FIFO (First Input, First Output. El primero que entra es el primero en salir).

El Tipo de Dato Abstracto Cola se define formalmente como un una coleccin de elementos, que tiene dos extremos, en la cual se agregan elementos por el final y se eliminan por el inicio.

Ejemplo de Colas

Cola de Impresin

Colas de Carros

Operaciones que se pueden efectuar en una Cola


Para el caso de las colas las operaciones bsicas que se pueden realizar son las siguientes.
1. Insertar un nuevo elemento en el extremo final (Push) 2. Eliminar el elemento que se encuentra en el extremo inicial (Pop) 3. Ver el elemento que se encuentra en el extremo inicial (Top)

Existen otras operaciones que se pueden efectuar en la cola, que no son fundamentales por esta razn se les llama operaciones auxiliares.
1. Verificar si la cola esta vaca (Empty) 2. Verificar si la cola esta llena (Full) 3. Ver la cantidad de elementos actuales en la cola. (Size)

Representacin del TDA Cola en el Computador


Las Colas al igual que las pilas no estn definidas como tales en los Lenguajes de Programacin (Con excepcin de algunos como C++ y Java) y para su representacin se requiere del uso de otras estructuras de datos.

Las colas se pueden representar bsicamente de dos formas.


1. Por medio de arreglos. 2. Usando nodos enlazados por medio de punteros

Al especificar este tipo de estructura de datos por medio de vectores, es necesario definir el tamao mximo de la cola (lo cual limita el nmero de elementos mximos que se pueden almacenar en la cola a un valor fijo). Tambin debemos tener dos variables auxiliares que nos indique el primero y el ltimo elemento de la cola

Representacin de la Cola por medio de Arreglos


TDA Cola
Frente, Fin : Entero

Datos : Arreglo [1..MAX]


pone(elem: Tipo Elem)

quita()
verFrente() : Tipo Elem colaVacia(): Booleano colaLlena(): Booleano elementos(): Entero

Suponga que se tiene una cola que puede almacenar un mximo de 5 elementos, la cual se encuentra vaca, y se desea insertar un elemento con clave 3. el Proceso se observa a continuacin.
TDA Cola MAX = 5
4

Insertar elemento en la Cola (Explicacin)

Como es el primer Se Estado mueve de el la Fin Cola a Se guarda el elemento elemento de la cola el antes la siguiente de insertar en esa posicin Frente y el Fin son posicin el Elemento disponible iguales

Frente = 0 -1 Fin = 0 -1

Fin Frente

Ahora deseamos insertar el elemento con clave 25


TDA Cola MAX = 5 Se Estado mueve de el la Fin Cola a Se guarda el elemento antes la siguiente de insertar en esa posicin posicin el Elemento disponible Frente = 0 Fin = 1 0
4

Insertar elemento en la Cola (Explicacin)

25 3

Fin 0 Frente

Ahora deseamos insertar el elemento con clave 16


TDA Cola MAX = 5 Se Estado mueve de el la Fin Cola a Se guarda el elemento antes la siguiente de insertar en esa posicin posicin el Elemento disponible Frente = 0 Fin = 2 1
Fin
4

Insertar elemento en la Cola (Explicacin)

16 25 3

Frente

Ahora deseamos insertar el elemento con clave 12


TDA Cola MAX = 5 Se Estado mueve de el la Fin Cola a Se guarda el elemento antes la siguiente de insertar en esa posicin posicin el Elemento disponible Frente = 0 Fin = 2 3
Fin
4

Insertar elemento en la Cola (Explicacin)

12
16 25 3

Frente

Ahora deseamos insertar el elemento con clave 8


TDA Cola MAX = 5 Se Estado mueve de el la Fin Cola a Se guarda el elemento antes la siguiente de insertar en esa posicin posicin el Elemento disponible Frente = 0 Fin = 4 3
Fin
4

Insertar elemento en la Cola (Explicacin)

12
16 25 3

Frente

La Cola esta llena, si se intentara insertar un nuevo elemento, se producir un error conocido como Desbordamiento (overflow), debido a que no se puede expandir ni contraer el tamao de la cola, y de poder hacerlo posiblemente consumira mucho tiempo.
TDA Cola MAX = 5 Estado de la Cola Frente = 0 Fin = 4
Fin
4

Insertar elemento en la Cola (Explicacin)

12
16 25 3

Frente

Suponga que deseamos eliminar un elemento de la cola


TDA Cola MAX = 5 Se Estado mueve deel laFrente Cola antes a la de siguiente eliminar elposicin Elemento Frente = 0 1 Fin = 4
Fin
4

Eliminar un elemento de la Cola (Explicacin)

12
16 25 3

Frente 0

Eliminar un elemento de la Cola (Explicacin)


Suponga que deseamos eliminar otro elemento de la cola
TDA Cola MAX = 5 Se Estado mueve deel laFrente Cola antes a la de siguiente eliminar elposicin Elemento Frente = 2 1 Fin = 4
Fin
4

12
16 25 3

Frente 1
0

Suponga que deseamos eliminar otro elemento de la cola


TDA Cola MAX = 5 Se Estado mueve deel laFrente Cola antes a la de siguiente eliminar elposicin Elemento Frente = 2 3 Fin = 4
Fin
4

Eliminar un elemento de la Cola (Explicacin)

12
16 25 3

Frente 2
1

Suponga que deseamos eliminar otro elemento de la cola


TDA Cola
Fin

Eliminar un elemento de la Cola (Explicacin)

MAX = 5 Se Estado mueve deel laFrente Cola antes a la de siguiente eliminar elposicin Elemento Frente = 4 3 Fin = 4
Frente

12
16 25 3

Suponga que deseamos eliminar otro elemento de la cola


TDA Cola
Fin

Eliminar un elemento de la Cola (Explicacin)

MAX = 5

Frente

Como Antes de Se Estado mueve deel laFrente Cola Eliminar Fin y Frente antes a la de siguiente eliminar son iguales la cola elposicin Elemento queda vaca

Frente = 5 4 -1 Fin = 4 -1

12
16 25 3

Suponga que deseamos eliminar otro elemento de la cola, Como Frente es -1 se sale del mtodo sin efectuar cambios.
TDA Cola MAX = 5 Frente = -1 Estado de la Cola Fin = -1
4

Insertar un elemento en la Cola (Explicacin)

12
16 25 3

Fin Frente

Algoritmo para el Mtodo colaVacia (Cola Con Frente Fijo)

FUNCION COLAVACIA() : BOOLEANO SI FRENTE == -1 ENTONCES RETORNAR VERDADERO SINO RETORNAR FALSO FIN SI FIN FUNCION

Algoritmo para el Mtodo colaLlena (Cola Con Frente Fijo)

FUNCION COLALLENA() : BOOLEANO SI FIN+1 == MAX ENTONCES RETORNAR VERDADERO SINO RETORNAR FALSO FIN SI FIN FUNCION

Algoritmo para el Mtodo verFrente (Cola Con Frente Fijo)

FUNCION VERFRENTE() : Tipo Elem SI FRENTE>=0 ENTONCES RETORNAR Datos[FRENTE] FIN SI FIN FUNCION

Algoritmo para el Mtodo elementos (Cola Con Frente Fijo)

FUNCION ELEMENTOS() : ENTERO RETORNAR FIN-FRENTE+1 FIN FUNCION

FUNCION PONE(Elem : Tipo Elem) : BOOLEANO SI (COLALLENA()) ENTONCES RETORNAR FALSO SINO FIN = FIN +1, Dato[FIN] = Elem SI(FRENTE == -1) ENTONCES FRENTE = 0 FIN SI RETORNAR VERDADERO FIN SI FIN FUNCION

Algoritmo para el Mtodo Insertar Elemento (Cola Con Frente Fijo)

Algoritmo para el Mtodo Eliminar Tope (Cola Con Frente Fijo)

FUNCION QUITA(): BOOLEANO SI (COLAVACIA()) ENTONCES RETORNAR FALSO SINO FRENTE = FRENTE+1 SI (FRENTE>FIN) ENTONCES FRENTE = FIN = -1 FIN SI RETORNAR VERDADERO FIN SI FIN FUNCION

Suponga que la Cola se encuentra en el siguiente estado, y deseamos insertar el elemento con Clave 5
TDA Cola MAX = 5
Fin
4

Insertar un elemento de la Cola (Explicacin)

Como Fin+1 es igual aEstado MAX la cola esta de la Cola llena y no se pueden antes de Insertar insertar ms datos

Frente = 2 Fin = 4

12
16 25 3

Frente 2
1

Como se puede observar en la diapositiva anterior a pesar que aun existen elementos disponibles al inicio del vector, es imposible seguir agregando elemento porque ya el Fin llego al Final del vector, a este tipo de colas se les llama Cola con frente fijo, ya que estn limitadas a recorrer el vector en un solo sentido. Colas Circulares Para solucionar la limitacin de la cola con frente fijo se crean las colas circulares o de frente variable, esto permite reutilizar los espacios que quedan disponibles al inicio del vector, despus de eliminar elementos de la cola. Una cola circular constituye una estructura de datos lineal en la cual el siguiente elemento del ltimo en realidad es el primero. De esta forma se utiliza de manera ms eficiente la memoria del computador.

Cola de arreglo con frente fijo

Insertar un elemento en la Cola (Explicacin)


Bajo el concepto de Cola Circular, si se intenta agregar el elemento con clave 5 en la cola el proceso sera el siguiente.
TDA Cola MAX = 5
Fin
4

Como la Cola no esta Estado la Cola llena y Fin de +1 igual Se insertar el es valor en antes de insertar a MAX se lleva Fin Fin a la posicin el Elemento la posicin 0

Frente = 2 Fin = 0 4

12
16 25 3 5

Frente 2
1

Ahora deseamos insertar el elemento con clave 23


TDA Cola MAX = 5 Se Estado mueve de el la Fin Cola a Se guarda el elemento antes la siguiente de insertar en esa posicin posicin el Elemento disponible Frente = 2 Fin = 0 1
4

Insertar elemento en la Cola (Explicacin)

12
16 25 23 5

Frente 2
1

En este estado, si se intenta agregar otro elemento no se podra ya que Fin+1 es igual al Frente, lo que significa que la Cola esta llena

Fin

Ahora deseamos eliminar un elemento de una cola que se encuentra en el siguiente estado
TDA Cola MAX = 5
Frente 4
3

Eliminar elemento de la Cola (Explicacin)

Se mueve el Frente a la Estado de la Cola siguiente posicin, pero antes de insertar como Frente+1 es MAX el Elemento se mueve al inicio del vector

Frente = 0 4 Fin = 0

12
16 25 5

Fin

Algoritmo para el Mtodo colaVacia (Cola Circular)

FUNCION COLAVACIA() : BOOLEANO SI FRENTE == -1 ENTONCES RETORNAR VERDADERO SINO RETORNAR FALSO FIN SI FIN FUNCION

Algoritmo para el Mtodo colaLlena (Cola Circular)

FUNCION COLALLENA() : BOOLEANO SI ELEMENTOS()==MAX ENTONCES RETORNAR VERDADERO SINO RETORNAR FALSO FIN SI FIN FUNCION

Algoritmo para el Mtodo verFrente (Cola Circular)

FUNCION VERFRENTE() : Tipo Elem SI FRENTE>=0 ENTONCES RETORNAR Datos[FRENTE] FIN SI FIN FUNCION

Algoritmo para el Mtodo elementos (Cola Circular)

FUNCION ELEMENTOS() : ENTERO SI (FIN>=FRENTE) ENTONCES RETORNAR FIN-FRENTE+1 SINO RETORNAR FIN+MAX-FRENTE+1 FIN SI FIN FUNCION

Algoritmo para el Mtodo Insertar Elemento (Cola Circular)

FUNCION PONE(Elem : Tipo Elem) : BOOLEANO SI (COLALLENA()) ENTONCES RETORNAR FALSO SINO FIN = FIN +1 SI FIN>=MAX ENTONCES FIN = 0 FIN SI SI(FRENTE == -1) ENTONCES FRENTE = 0 FIN SI Dato[FIN] = Elem RETORNAR VERDADERO FIN SI FIN FUNCION

Algoritmo para el Mtodo Eliminar Tope (Cola Circular)

FUNCION QUITA(): BOOLEANO SI (COLAVACIA()) ENTONCES RETORNAR FALSO SINO FRENTE = FRENTE +1 SI (FRENTE-1==FIN) ENTONCES FRENTE = FIN = -1 FIN SI SI FRENTE>=MAX ENTONCES FRENTE = 0 FIN SI RETORNAR VERDADERO FIN SI FIN FUNCION

Doble cola
Es una generalizacin de una estructura de datos tipo cola. Los elementos se pueden insertar o eliminar por cualquiera de los dos extremos.
Doble Cola

Frente 1 2

Final 3 Max

Existen dos variantes de las dobles coalas:


Doble cola con entrada restringida
Permite las eliminaciones se realicen por cualquiera de los dos extremos
Doble Cola

Frente 1 2

Final 3 Max

Doble cola con salida restringida


Permite que las inserciones se realicen por cualquiera de los dos extremos, mientras que las eliminaciones slo por el Frente de la cola

Doble Cola Frente

1 2 3 Max

Final

También podría gustarte