miércoles, 17 de junio de 2015

Exposición Colas


Estructura  de  Datos 

Tipo Cola  (FIFO)

Figura 1: Una Cola
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 almacenan y, por consiguiente, una cola es una estructura de tipo FIFO (first-in, firs-out, primero en entrar-primero en salir o bien primero en llegar-primero en ser servido). El servicio de atención a clientes en un almacén es un ejemplo típico de cola. La acción de gestión de memoria intermedia (buffering) de trabajos o tareas de impresora en un distribuidor de impresoras (spooler) es otro ejemplo típico de cola

Operaciones dentro de  una  Estructura tipo Cola



Las operaciones usuales en las colas son Insertar y Quitar. La operación Insertar añade un elemento por el extremo final de la cola, y la operación Quitar elimina o extrae un elemento por el extremo opuesto, el frente o primero de la cola. La organización de elementos en forma de cola asegura que el primero en entrar es el primero en salir


Figura 2: Tipos de Datos

 
En una cola, al igual que en una pila, los datos se almacenan de un modo lineal y el acceso a los datos sólo está permitido en los extremos de la cola. 

Colas Implementadas con Arrays  

Las colas se implementan utilizando una estructura estática (arrays) o una estructura dinámica (listas enlazadas, Vector...). La declaración 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, es decir, un marcador apuntando a la posición de la cabeza de la cola y el otro al primer espacio vacío que sigue al final de la cola. 

Cuando un elemento se añade a la cola, se verifica si el marcador fin apunta a una posición válida, y entonces se añade el elemento a la cola y se incrementa el marcador fin en 1. Cuando un elemento se elimina de la cola, se hace una prueba para ver si la cola está vacía y, si no es así, se recupera el elemento de la posición apuntada por el marcador de cabeza, y éste se incrementa en 1.

Tipos de Colas 

Colas con Arrays circulares: Permite que la totalidad de sus posiciones se utilicen para almacenar elementos de la cola sin necesidad de desplazar elementos.







 

 
Colas con una lista enlazada: Un diseño alternativo consiste en utilizar una lista enlazada que, en todo momento, tiene el mismo número de nodos que elementos la cola.  
Bicolas-Colas  de  doble entrada:
Una bicola es un conjunto ordenado de elementos, al que se puede añadir o quitar ele- mentos desde cualquier extremo del mismo. El acceso a la bicola está permitido desde cualquier extremo. Se puede afirmar que una bicola es una cola bidireccional


Este  es un ejemplo de una  cola en java  utilizando un array:
El algoritmo se  desarrollo en Netbeans  primero  adjuntare  las  capturas  de  su ejecución mostrando su funcionamiento y luego su código fuente:
1.-  Primero Ingresamo el tamaño deseado  de  mi cola:
 

2.- Seleccionamos Ingresar  los datos  de   la  Cola deseada.


 
3.-Al final  realizamos la impresión de  la  cola.



















4.-Como paso  final  podemos eleiminar  datos  de nuestra  cola asi como vaciarla  o  finalizar la ejecución.

A  continuación se presentan las  clases  Utilizadas  para  el siguiente  programa:







import javax.swing.JOptionPane;
 
public class ColaArray 
{
    private int MAX;
    private int[] COLA;
    private int FRENTE;
    private int FINAL;
 
    public ColaArray()
    {
        this.MAX = 100;
        this.FRENTE = 0;
        this.FINAL = 0;
        this.COLA = new int[this.MAX+1];
    }
 
    public ColaArray(int MAX)
    {
        this.MAX = MAX;
        this.FRENTE = 0;
        this.FINAL = 0;  
        this.COLA = new int[this.MAX+1];
    }  
     
    public boolean IsColaLlena()
    {
        if(this.FINAL == this.MAX)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
 
    public boolean IsColaVacia()
    {
        if(this.FRENTE == this.FINAL)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
     
    public void InsertarCola()
    {
        if(this.IsColaLlena())
        {
            JOptionPane.showMessageDialog(null,"LA COLA ESTÁ LLENA");
        }
        else
        {
            int ITEM;
 
            ITEM = Integer.parseInt(JOptionPane.showInputDialog(null,"INGRESE EL ITEM A AGREGAR"));  
             
            this.FINAL++; 
            this.COLA[FINAL] = ITEM;
                        
        }
    }
 
    public void EliminarCola()
    {
        if(this.FRENTE == this.FINAL)
        {
            JOptionPane.showMessageDialog(null,"LA COLA ESTA VACIA");
        }
        else
        {            
            for(int i=FRENTE;i < FINAL - 1;i++)
            {
                COLA[i] = COLA[i+1];
            }
             
            FINAL--;
        }
    }
 
    public void MostrarCola()
    {
        if(this.IsColaVacia())
        {
            JOptionPane.showMessageDialog(null,"LA COLA ESTÁ VACIA\n NO HAY DATOS QUE MOSTRAR","MOSTRAR DATOS",JOptionPane.WARNING_MESSAGE);
        }
        else
        {
            String MOSTRAR = "";
             
            for(int i=FRENTE+1;i<=FINAL;i++)
            {
                MOSTRAR = MOSTRAR + COLA[i]+"\n";
            }
             
            JOptionPane.showMessageDialog(null,"TOTAL ES : "+this.FINAL+"\n"+"LOS DATOS DE LA COLA SON : \n"+MOSTRAR,"MOSTRAR DATOS",JOptionPane.INFORMATION_MESSAGE);
        }
    }
 
    public void VaciarCola()
    {
        FRENTE = 0;
        FINAL = 0;
    }       
}


import javax.swing.JOptionPane;
 
public class MainColaArray 
{
    public static ColaArray Cola;
     
    public static void main(String[] ARGUMENTOS)
    {    
        int MAX;
 
        MAX = Integer.parseInt(JOptionPane.showInputDialog(null,"INGRESE EL TAMAÑO DE LA COLA"));   
        Cola = new ColaArray(MAX);
         
        MenuCola();
    }
     
    public static void MenuCola()
    {
        int Opcion;
         
        do
        {
            Opcion = Integer.parseInt(JOptionPane.showInputDialog(null,
                    "1. INGRESAR DATOS\n"+
                    "2. ELIMINAR DATOS\n"+
                    "3. OBSERVAR DATOS\n"+
                    "4. VACIAR COLA\n"+
                    "5. SALIR\n"+
                    "--------------------------------------------------------\n"+
                    "INGRESE LA OPCION [1 - 5]","MENU COLA",JOptionPane.QUESTION_MESSAGE));
             
            switch(Opcion)
            {
                case 1: Cola.InsertarCola();break;
                case 2: Cola.EliminarCola();break;
                case 3: Cola.MostrarCola();break;
                case 4: Cola.VaciarCola();break;
                case 5: System.exit(0);break;
                default: JOptionPane.showMessageDialog(null,"INGRESE UNA OPCION VALIDA \n","ERROR OPCION",JOptionPane.WARNING_MESSAGE);break;
            }
        }
        while(true); //-- SEGUIRA HASTA QUE OPCION SEA IGUAL A 5
    }
}

No hay comentarios.:

Publicar un comentario