Tipos de Colas en Java
Tipos de Colas en Java
Tipos de Colas en Java
DE LOS CABOS
PRESENTA:
Delfino Alvarado Mendoza
CATEDRATICO:
Mauro Antonio Jernimo Montero
ndice
Introduccin................................................................................................... 3
Lista
Tipo Cola............................................................................................ 4
Conclusin...................................................................................................... 7
Bibliografa..................................................................................................... 8
Introduccin
Una cola puede almacenar lo que nosotros queramos, nmeros, personas,
documentos, cualquier cosa. Esta estructura de datos tiene muchas
aplicaciones en la informtica al igual que la pila, por ejemplo cuando mandan
a imprimir varios documentos a una impresora, existe una cola de impresin
que sigue la filosofa, se imprimen los primeros documentos y si quiero imprimir
un nuevo documento se adiciona al final de todos los documentos que estn
esperando a imprimirse.
Una vez comprendido en concepto ahora veamos como se implementa esto en
un lenguaje de programacin, por ahora lo implementaremos en Java. Java en
sus libreras ya tiene la forma de implementar Colas (queue), nosotros ahora
haremos como si no existiera, es decir crearemos nuestra versin, que es lo
que generalmente se hace cuando se aprende colas en la universidad.
Pues bien existen dos formas de implementar para que la cola sea o bien
esttica (reservamos un espacio fijo en memoria) o bien dinmica (el tamao
en memoria va creciendo segn se requiere), se implementa con arrays o con
listas enlazadas respectivamente. Nosotros implementaremos haciendo de un
array bidimensional es decir de modo esttico y al decir esttico estamos
diciendo que tendr un limite para almacenar datos en la cola.
Lista
Tipo Cola
Una lista se comporta como una cola si las inserciones las hacemos al final y
las extracciones las hacemos por el frente de la lista. Tambin se las llama
listas FIFO (First In First Out - primero en entrar primero en salir)
Confeccionaremos un programa que permita administrar una lista tipo cola.
Desarrollaremos los mtodos de insertar, extraer, vacia e imprimir.
La declaracin del nodo es igual a la clase Pila. Luego definimos dos punteros
externos:
private Nodo raiz,fondo;
raz apunta al principio de la lista y fondo al final de la lista. Utilizar dos
punteros tiene como ventaja que cada vez que tengamos que insertar un nodo
al final de la lista no tengamos que recorrerla. Por supuesto que es
perfectamente vlido implementar una cola con un nico puntero externo a la
lista.
En el constructor inicializamos a los dos punteros en null (Realmente esto es
opcional ya que los atributos de una clase en java se inicializan
automticamente con null):
Cola() {
raiz=null;
fondo=null;
}
El mtodo vaca retorna true si la lista no tiene nodos y false en caso contrario:
boolean vacia (){
if (raiz == null)
return true;
else
return false;
}
En la insercin luego de crear el nodo tenemos dos posibilidades: que la cola
est vaca, en cuyo caso los dos punteros externos a la lista deben apuntar al
nodo creado, o que haya nodos en la lista.
Nodo nuevo;
nuevo = new Nodo ();
nuevo.info = info;
nuevo.sig = null;
if (vacia ()) {
raiz = nuevo;
fondo = nuevo;
} else {
fondo.sig = nuevo;
fondo = nuevo;
}
Debemos enlazar el puntero sig del ltimo nodo con el nodo recin creado:
fondo.sig = nuevo;
Y por ltimo el puntero externo fondo debe apuntar al nodo apuntado por
nuevo:
fondo = nuevo;
Con esto ya tenemos correctamente enlazados los nodos en la lista tipo cola.
Recordar que el puntero nuevo desaparece cuando se sale del mtodo insertar,
pero el nodo creado no se pierde porque queda enlazado en la lista.
El funcionamiento del mtodo extraer es similar al de la pila:
int extraer ()
{
if (!vacia ())
{
int informacion = raiz.info;
if (raiz == fondo){
raiz = null;
fondo = null;
} else {
raiz = raiz.sig;
}
return informacion;
} else
return Integer.MAX_VALUE;
}
Si la lista no est vaca guardamos en una variable local la informacin del
primer nodo:
int informacion = raiz.info;
Para saber si hay un solo nodo verificamos si los dos punteros raiz y fondo
apuntan a la misma direccin de memoria:
if (raiz == fondo){
Luego hacemos:
raiz = null;
fondo = null;
raiz = raiz.sig;
Conclusin
Para manipular elementos en el vector de la cola son necesarias variables que
me digan en donde empiezan los elementos y otra en donde terminan, como tal
vez ests pensando porque no solo una? (una que me diga en donde termina
asumiendo que siempre se empieza desde la posicin 0 del array), pues se
puede implementar con solo una de estas variables pero presenta muchas
desventajas pues si eliminamos un elemento de nuestra cola, (el primero
justamente)
Tendramos que recorrer todos los siguientes elementos una posicin adelante
y esta manera seria muy lenta de implementar pues que pasa si son 1000
elementos, eso es mucho tiempo perdido, entonces es por eso que usamos
dos variables que me digan donde empieza y donde terminan los elementos de
la cola, dos variables enteras que llamaremos inicio y fin, estas variables
funcionan de la siguiente manera:
Bibliografa
http://www.javaya.com.ar/detalleconcepto.php?codigo=117&inicio=40