Programación 3: colas

32
ESTRUCTURAS DE DATOS EN JAVA COLAS GABRIELA VERDUGO PROGRAMACIÓN III ING. ÁNGEL VÁZQUEZ

Transcript of Programación 3: colas

Estructuras de datos en java colas

Estructuras de datos en javacolas Gabriela verdugoPROGRAMACIN IIIIng. ngel Vzquez

CONTENIDOConcepto de ColaEspecificaciones del Tipo Abstracto ColaColas Implementadas con arraysCola con un array circularCola con una Lista EnlazadaBicolas: Colas de doble entrada

CONCEPTO DE COLAUna cola es una estructura de datos que almacena elementos en una lista y permite acceder a los datos por uno de los dos extremos de la lista.Un elemento se inserta en la cola (parte final) de la lista y se suprime o elimina por el frente (parte inicial, frente) de la lista.Los elementos se eliminan (se quitan) de la cola en el mismo orden en que se almacenan.Una cola es una estructura de tipo Fifo. (First in First Out)

ESPECIFICACIONES DEL TIPO ABSTRACTO COLACrear Cola : Inicia la Cola como vaca.Insertar : Aade un elemento al final de la Cola.Quitar : (Retira) Extrae el elemento del Frente de la Cola.Cola Vaca : Comprueba si la cola no tiene elementos.Cola Llena : Comprueba si la Cola esta llena de Elementos.Frente : Obtiene el elemento del Frente de la Cola o el primer Elemento.Tamao de la Cola : Obtiene el nmero mximo de Elementos que puede tener la Cola.

EJEMPLOS DE COLAS.NULLCreacin de la ColaPrimer Nodo vacio o Null

AGREGAR UN ELEMENTO A LA cOLANULLLista de Elementos a ser agregados18616

AGREGAR UN ELEMENTO A LA cOLA1Lista de Elementos a ser agregados8616NULL

AGREGAR UN ELEMENTO A LA cOLA1Lista de Elementos a ser agregados6168NULL

AGREGAR UN ELEMENTO A LA cOLA1Lista de Elementos a ser agregados1686NULL

AGREGAR UN ELEMENTO A LA cOLA1Todos los elementos deseados se han insertado en la Cola86

16

NULL

Eliminar UN ELEMENTO de LA cOLA1FIRST IN FIST OUT86

16

COLA COMPLETA

NULL

Eliminar UN ELEMENTO de LA cOLAFIRST IN FIST OUT86

16

ELEMENTO ELIMINADO

NULL

Colas Implementadas con VECTORESAl igual que las pilas las colas se implementan usando una estructura esttica ( Vectores).La declaracin de una Cola ha de contener un array para almacenar los elementos de la cola y dos marcadores o apuntadores para mantener las posiciones frente y fin de la cola.Cuando un elemento se elimina de la cola, se hace una prueba para ver si la cola est vaca y, si no es as, se recupera el elemento de la posicin apuntada por el marcador de cabeza, y ste se incrementa en 1.

REPRESENTACIONES DE COLAS

DECLARACIN DE LA CLASE COLAUna cola debe tratar diferentes tipos de datos: enteros, cadenas, objetos, etcLa clase ColaLineal contiene un array (listaCola) cuyo mximo tamao se determina por la constante MAXTAMQ.En el Tipo de Dato se puede poner un tipo simple o bien un Object.La operacin Insertar toma el elemento y lo aade al final de la Lista (Propiedad de las Colas).La Operacin Frente Devuelve el primer elemento de la cola sin eliminar este elemento.La Operacin Cola Vaca comprueba si la Cola tiene elementos ya que es necesaria esta operacin antes de eliminar elementos.

Declaracin de la clase cola

NOTA PARA RECORDAR:La realizacin de una cola con un array lineal es notablemente ineficiente, se puede alcanzar la condicin de cola llena existiendo elementos del array sin ocupar. Se aconseja no utilizar esta implementacin.Se alcanza la condicin de cola llena ya que al realizar la operacin de quitar un elemento, avanza el frente y, por consiguiente, las posiciones anteriores quedan desocupadas, no accesibles.

COLA CON UN ARRAY CIRCULAR La forma ms eficiente de almacenar una cola en un array es modelarlo de tal forma que se una el extremo final con el extremo cabeza. Tal array se denomina array circular y permite que la totalidad de sus posiciones se utilicen para almacenar elementos de la cola sin necesidad de desplazar elementos.

La figura muestra un array circular de n elementos.

Operaciones con arrays circulares en colasCreacin de una cola vaca, de tal forma que fin apunte a una posicin inmediatamente anterior a frente: frente = 0; fin = MAXTAMQ-1.Comprobar si una cola est vaca: frente == siguiente(fin)Comprobar si una cola est llena. Para diferenciar la condicin de cola llena de cola vaca se sacrifica una posicin del array, de tal forma que la capacidad de la cola va a ser MAXTAMQ-1. La condicin de cola llena es: frente == siguiente(siguiente(fin)).Poner un elemento a la cola: si la cola no est llena, avanzar fin a la siguiente posicin, fin = (fin + 1) % MAXTAMQ, y asignar el elemento.

Clase cola con array circular La clase declara los apuntadores frente, fin y el array listaCola[ ].Para obtener la siguiente posicin de una dada aplicando la teora de los restos, se escribe el mtodo siguiente( ).Ahora el tipo de los elementos es Object, de tal forma que se pueda guardar cualquier tipo de elementos.

COLAS CON LISTAS ENLAZADASCola con una lista enlazada permite ajustarse exactamente al nmero de elementos de la cola.Utiliza dos apuntadores (referencias) para acceder a la lista, frente y fin, que son los extremos por donde salen y por donde se ponen, respectivamente, los elementos de la cola.

Declaracin de cola y nodoLa representacin del TAD Cola con listas maneja dos clases; la clase Nodo y la clase, con las operaciones de las colas, ColaLista.Al crear un Nodo, se asigna el elemento y el enlace se pone a null. Con el objetivo de generalizar, el elemento se declara de tipo Object.La clase ColaLista define las variables (atributos) de acceso: frente y fin, y las operaciones bsicas del TAD Cola.El constructor de ColaLista inicializa frente y fin a null, es decir, a la condicin cola vaca.

Declaracin de cola y nodo

Declaracin de cola y nodo

BICOLAS : COLAS DE DOBLES ENTRADALa estructura bicola o cola de doble entrada se puede considerar que es una extensin del TAD Cola.Una bicola es un conjunto ordenado de elementos, al que se puede aadir o quitar elementos desde cualquier extremo del mismo.Se puede afirmar que una bicola es una cola bidireccional .Los dos extremos de una bicola se pueden identificar como frente y fin (iguales nombres que en una cola).

OPERACIONES CON BICOLAS.CrearBicola: Inicializa una bicola sin elementos.BicolaVacia: Devuelve true si la bicola no tiene elementos.PonerFrente: Aade un elemento por el extremo frente.PonerFinal: Aade un elemento por el extremo final.QuitarFrente: Devuelve el elemento Frente y lo retira de la bicola.QuitarFinal: Devuelve el elemento Final y lo retira de la bicola.Frente: Devuelve el elemento que se encuentra en el extremo frente.Final: Devuelve el elemento que se encuentra en el extremo final.

Bicolas con listas enlazadas

Bicolas con listas enlazadas

RESUMENUna cola es una lista lineal en la cual los datos se insertan por un extremo( final) que se extraen por el otro extremo (frente). Es una estructura FIFO (first-in, first-out, primero en entrar-primero en salir).Las operaciones bsicas que se aplican sobre colas son: crearCola, colaVacia, colaLlena, insertar, frente, retirar.El TAD Cola se puede implementar con arrays y con listas enlazadas. La implementacin con un array lineal es muy ineficiente; se ha de considerar el array como una estructura circular y aplicar la teora de los restos para avanzar el frente y el final de la cola.

RESUMENLa realizacin de una cola con listas enlazadas permite que el tamao de la estructura se ajuste al nmero de elementos. La cola puede crecer indefinidamente, con el nico tope de la memoria libre.Las bicolas son colas dobles, las operaciones bsicas de insertar y retirar elementos se pueden realizar por los dos extremos. A veces se ponen restricciones de entrada o de salida por algn extremo. Una bicola es, realmente, una extensin de una cola.

BIBLIOGRAFIA.Joyanes Aguilar L, Zahonero Martnez I. Estructura de Datos en Java: Blanca Pecharromn.Sanchez Allende J, Fernandez Manjn B. (2009). Programacin en Java: Editorial Universidad Autnoma de Madrid. Flores Fernadez H. (2012). Programacin Orientada a Objetos usando Java: Ecoe Ediciones.