miércoles, 18 de noviembre de 2015

Colas en Java


Una 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. Las aplicaciones utilizan una cola para almacenar elementos en su orden de aparición o concurrencia.

Los elementos se eliminan de la cola en el mismo orden en que se almacena, por ello una cola es una estructura de tipo FIFO (first-in/first-out) es decir que el dato primero en entrar será el primero en salir.



A continuación se muestra un vídeo explicativo sobre las Colas en Java:


Al igual que las pilas, las colas se pueden implementar utilizando una estructura estática (arreglos), o una estructura dinámica (listas enlazadas, vectores, etc). 

Operaciones de las Colas:

Al igual que las Pilas, las colas poseen dos operaciones imprescindibles que son para añadir elementos o "encolar" y para eliminar elementos o "desencolar", al igual que poseen operaciones para manipular y mostrar su contenido, las cuales son:

CrearCola: Inicia la cola como vacía
Cola vacía: Comprobar si la cola no tiene elementos
Cola llena: Comprobar si la cola está llena de elementos
Frente: Obtiene el elemento frente o primero de la cola
Tamaño de la cola: Número de elementos máximo que puede contener la cola

En resumen...

Una cola es una estructura de datos del tipo FIFO, con dos operaciones imprescindibles: encolar y desencolar, al primer elemento se lo conoce como "frente o principio" y al último como "final".




Ejemplo práctico:

A continuación se muestra un programa simple, en donde se aplican las operaciones encolar y desencolar elementos en una Cola. El programa está hecho con listas simples enlazadas en el cual se insertan 5 elementos, utilizando la función insertar (encolar). Después se utiliza la función extraer (encolar) para eliminar el primer nodo. Finalmente se cuenta cuantos elementos tiene la nueva lista, e imprime los valores.

 Clase Nodo:

public class Nodo 
{
 //Declaracion de atributos
 private int dato;
 private Nodo next;
 
 //Constructor
 public Nodo(int dato){
 this.dato=dato;
 }
 
 //Metodos getter and setters
 public int getDato() 
 {
 return dato;
 }
 public void setDato(int dato) 
 {
 this.dato = dato;
 }
 public Nodo getNext() 
 {
 return next;
 }
 public void setNext(Nodo next) 
 {
 this.next = next;
 }
 
 //Metodo toString
 public String toString()
 {
 String s=" "+dato+" ";
 return s;
 }
}


Clase Colas:

public class Colas 
{
 //Declaración de atributos
 private Nodo inicio;
 private Nodo termino;

 //Constructor sin parametros
 public Colas()
 {
 inicio=null;
 termino=null;
 }
 
 //Metodo insertar
 public void insertar(int dato)
 {
 Nodo i=new Nodo(dato);
 i.setNext(null);
 if(inicio==null & termino==null)
 {
 inicio=i;
 termino=i;
 }
 termino.setNext(i);
 termino=termino.getNext();
 }
 
 //Metodo extraer dato
 public int extraer()
 {
 int dato=inicio.getDato();
 inicio=inicio.getNext();
 return dato;
 }
 
 //Metodo para comprobar que la cola no esta vacia
 public boolean estaVacia()
 {
 boolean cola=false;
 if(inicio==null & termino==null)
 {
 cola=true;
 System.out.println("La cola esta vacia");
 }
 else
 {
 System.out.println("La cola no esta vacia");
 cola=false;
 }
 return cola;
 }
 
 //Metodo para contar los elementos de la cola
 public int contar()
 {
 int contador=0;
 Nodo c=this.inicio;
 while(c!=null)
 {
 contador++;
 c=c.getNext();
 }
 System.out.println("Numero de datos en la cola: "+contador);
 return contador;
 }
 
 //Metodo toString
 public String toString()
 {
 Nodo c=this.inicio;
 String s="";
 while(c!=null)
 {
 s=s+c.toString();
 c=c.getNext();
 }
 return s;
 } 
}



Clase Principal:


public class Principal 
{
 public static void main(String[] args) 
 {
  Colas cola1=new Colas();
  cola1.insertar(46);
  cola1.insertar(12);
  cola1.insertar(87);
  cola1.insertar(125);
  cola1.insertar(30);
  cola1.extraer();
  cola1.estaVacia();
  cola1.contar();
  System.out.println(cola1.toString());
 }
}


Captura de pantalla del programa:



Referencias:

Academia. (2015). “Listas, pilas y colas en Java”. Recuperado el 18 de noviembre del 2015 de: http://www.academia.edu/9865829/Listas_pilas_y_colas_en_Java

4 comentarios:

  1. Excelente contenido, me ayudaste a entender mejor.

    ResponderEliminar
  2. Insertas 5 elementos y solo está mostrando 4, no entiendo el por qué

    ResponderEliminar
    Respuestas
    1. lee esta parte y entenderás el porqué... "Después se utiliza la función extraer (encolar) para eliminar el primer nodo. Finalmente se cuenta cuantos elementos tiene la nueva lista, e imprime los valores."

      para que te muestre todos loe elementos de la cola incluyendo el primero solo debes borrar la línea que dice "cola1.extraer();" y listo.

      Eliminar