jueves, 13 de octubre de 2011

colas

Una cola es una estructura de datos, caracterizada por ser una secuencia de elementos en la que la operación de inserción push se realiza por un extremo y la operación de extracción pop por el otro. También se le llama estructura FIFO (del inglés First In First Out), debido a que el primer elemento en entrar será también el primero en salir.
Las colas se utilizan en sistemas informáticos, transportes y operaciones de investigación (entre otros), dónde los objetos, personas o eventos son tomados como datos que se almacenan y se guardan mediante colas para su posterior procesamiento. Este tipo de estructura de datos abstracta se implementa en lenguajes orientados a objetos mediante clases, en forma de listas enlazadas.

La particularidad de una estructura de datos de cola es el hecho de que sólo podemos acceder al primer y al último elemento de la estructura. Así mismo, los elementos sólo se pueden eliminar por el principio y sólo se pueden añadir por el final de la cola.
Ejemplo de Cola
Ejemplos de colas en la vida real serían: personas comprando en un supermercado, esperando para entrar a ver un partido de béisbol, esperando en el cine para ver una película, una pequeña peluquería, etc. La idea esencial es que son todos líneas de espera.

operaciones con colas



  • Crear: se crea la cola vacía.







  • Encolar (añadir, entrar, insertar): se añade un elemento a la cola. Se añade al final de esta.







  • Desencolar (sacar, salir, eliminar): se elimina el elemento frontal de la cola, es decir, el primer elemento que entró.







  • Frente (consultar, front): se devuelve el elemento frontal de la cola, es decir, el primer elemento que entró.






  • tipos de colas
    • Colas circulares (anillos): en las que el último elemento y el primero están unidos.
    • Colas de prioridad: En ellas, los elementos se atienden en el orden indicado por una prioridad asociada a cada uno. Si varios elementos tienen la misma prioridad, se atenderán de modo convencional según la posición que ocupen. Hay 2 formas de implementación:
    1. Añadir un campo a cada nodo con su prioridad. Resulta conveniente mantener la cola ordenada por orden de prioridad.
    2. Crear tantas colas como prioridades haya, y almacenar cada elemento en su cola.
    • Bicolas: son colas en donde los nodos se pueden añadir y quitar por ambos extremos; se les llama DEQUE (Double Ended QUEue). Para representar las bicolas lo podemos hacer con un array circular con Inicio y Fin que apunten a cada uno de los extremos. Hay variantes:
    • Bicolas de entrada restringida: Son aquellas donde la inserción sólo se hace por el final, aunque podemos eliminar al inicio ó al final.
    • Bicolas de salida restringida: Son aquellas donde sólo se elimina por el final, aunque se puede insertar al inicio y al final.

    Aplicaciones de las Colas

    Las Colas también se utilizan en muchas maneras en los sistemas operativos para planificar el uso de los distintos recursos de la computadora. Uno de estos recursos es la propia CPU (Unidad Central de Procesamiento).
    Si esta trabajando en una sistema multiusuario, cuando le dice a la computadora que ejecute un programa concreto, el sistema operativo añade su petición a su "cola de trabajo".
    Cuando su petición llega al frente de la cola, el programa solicitado pasa a ejecutarse. Igualmente, las colas se utilizan para asignar tiempo a los distintos usuarios de los dispositivos de entrada/salida (E/S), impresoras, discos, cintas y demás. El sistema operativo mantiene colas para peticiones de imprimir, leer o escribir en cada uno de estos dispositivos.

    programa de colas
    este programa es un ejemplo de una cola
    import javax.swing.*;
    public class ColaJava {
    static Cola accion=new Cola();
    public static void main(String[] args) {
    int opc=0; while(true){ opc=Integer.parseInt(JOptionPane.showInputDialog(null, "---------------------------------------\n" + "Cola en Java\n" + "---------------------------------------\n" + "1. Introducir dato\n" + "2. Sacar dato\n" + "3. Ver datos introducidos\n" + "4. Borrar los datos de la cola\n" + "---------------------------------------\n" + "5. Salir\n" + "---------------------------------------\n" +
    "Teclea el numero de la accion a relizar:"
    ));
    switch(opc){ case 1: accion.Introducir(); break;
    case 2: accion.Sacar();
    break;
    case 3: accion.Mostrar();
    break;
    case 4: accion.Borrar();
    break;
    case 5: System.exit(0);
    break;
    default: JOptionPane.showMessageDialog(null,"No se realizo ningunaaccion\nOpcion no valida"); break; } } } }class Cola{ int tamaño=5;
    String cola[]=new String [tamaño];
    int frente=0;
    int ultimo=-1;
    public void Introducir(){
    if(ultimo==cola.length-1){
    JOptionPane.showMessageDialog(null,"No se realizo ninguna accion");
    JOptionPane.showMessageDialog(null,"La cola esta llena\nSaca un datopara poder introducir uno nuevo"); }else{ ultimo++; cola[ultimo]=JOptionPane.showInputDialog(null,"Que dato deseas introducir:"); } }public void Sacar(){ if(ultimo==-1){
    JOptionPane.showMessageDialog(null,"No se realizo ninguna accion");
    JOptionPane.showMessageDialog(null,"La cola esta vacia\nIntroduce unnuevo dato para poder sacar uno"); }else{ JOptionPane.showMessageDialog(null,"Se saco el dato ( "+cola[frente]+" )"); for(int i=frente;i<ultimo;i++){ cola[i]=cola[i+1]; }cola[ultimo]=null; ultimo--; } }public void Mostrar(){ if(ultimo==-1){ JOptionPane.showMessageDialog(null,"La cola esta vacia\nNo hay datos que mostrar"); } else{ String mostrar=""; for(int i=frente;i<=ultimo;i++){ mostrar=mostrar+cola[i]; }JOptionPane.showMessageDialog(null,"El dato frente es: "+cola[frente]); JOptionPane.showMessageDialog(null,"El dato ultimo es: "+cola[ultimo]); JOptionPane.showMessageDialog(null,"Los datos almacenados son:\n"+mostrar); } }public void Borrar(){ frente=0;
    ultimo=-1;
    JOptionPane.showMessageDialog(null,"Todos los datos fueron borrados:\n");
    }
    }
    bibliografia
    colas

    No hay comentarios:

    Publicar un comentario