miércoles, 17 de junio de 2015

Colas en Java

¿Qué es una cola?

Una cola es una estructura de datos que permite ingresar los datos en nodos, estructurados en forma de una cola.

Como se observa en la figura, el primer nodo en entrar es el primero en salir (FIFO: First In First Out)

Para implementarlo en Java, se crea una clase Cola y una clase Nodo, en donde nodo tiene un Nodo siguiente y un Objeto dato. La clase Cola tiene base(Nodo) = ultimo y cima(Nodo) = primero, y los métodos: push(insertar al final), pop(sacar primero) y peek(mostar primero).

Insertar a la cola:
  1. Se crea un nuevo nodo con el dato.
  2. Si primero esta vacío entonces primero y último es igual nuevo nodo y continuar con paso 4.
  3. Si la cola no esta vacía entonces el siguiente del último es igual al nuevo nodo y nuevo último es igual al nuevo nodo.
  4. Fin.
Sacar primero:
  1. Nodo auxiliar es igual a primero.
  2. Primero es igual al siguiente del primero.
  3. Retornar primero.
  4. Fin.
Mostar primero
  1. Retornar primero.
  2. Fin.

Nodo.java
/**
 *
 * @author robertoarmas
 */
public class Nodo{
    
    private Object dato;
    private Nodo siguiente;
     
    public Nodo(Object dato){
        this.dato = dato;
        this.siguiente = null;
    }

    public Object getDato() {
        return dato;
    }

    public void setDato(Object dato) {
        this.dato = dato;
    }

    public Nodo getSiguiente() {
        return siguiente;
    }

    public void setSiguiente(Nodo siguiente) {
        this.siguiente = siguiente;
    }
    
}

Cola.java
/**
 *
 * @author robertoarmas
 */
public class Cola{
 
     private Nodo cima;
     private Nodo base;
      
     public Cola(){
          this.cima = null;
     }
     
     public void push(Object dato){
        Nodo nuevo = new Nodo(dato);
        if(this.cima == null){
            this.cima = this.base = nuevo;
            return;
        }
        this.base.setSiguiente(nuevo);
        this.base = nuevo;
     }
     
     public Object peek(){
         return this.cima.getDato();
     }
     
     public Object pop(){
        Nodo aux = this.cima;
        this.cima = aux.getSiguiente();
        return aux.getDato();
     }
     
     public void print(){
         Nodo aux = this.cima;
         while(aux != null){
             System.out.println(aux.getDato());
             aux = aux.getSiguiente();
         }
     }
     
 }
 

Main.java
/**
 *
 * @author robertoarmas
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Cola c = new Cola();
        c.push("Primero en entrar Primero en salir");
        c.push("Otro dato despues");
        c.push("ultimo dato");
        c.print();
        System.out.println("+++++++++++++++++++++++++");
        System.out.println("Mostrar cima:" + c.peek());
        System.out.println("+++++++++++++++++++++++++");
        System.out.println("Sacar cima:" + c.pop());
        System.out.println("Nueva cima:" + c.peek());
        System.out.println("+++++++++++++++++++++++++");
        System.out.println("Sacar:" + c.pop());
        System.out.println("--------------------------");
        System.out.println("Imprimir cola");
        c.print();
       
    }
    
}

Salida:
Primero en entrar Primero en salir
Otro dato despues
ultimo dato
+++++++++++++++++++++++++
Mostrar cima:Primero en entrar Primero en salir
+++++++++++++++++++++++++
Sacar cima:Primero en entrar Primero en salir
Nueva cima:Otro dato despues
+++++++++++++++++++++++++
Sacar:Otro dato despues
--------------------------
Imprimir cola
ultimo dato

Descargar el proyecto en GitHub

No hay comentarios:

Publicar un comentario