1 Ing. Pascual Yana Chejo ESTRUCTURA: COLA CIRCULAR Las eliminaciones que se realizan en una cola simple generan espacios que no pueden ser reutilizados. La solucin que se describe implica la reutilizacin de esos espacios, a travs del mecanismo llamado COLA CIRCULAR. DEFINICIN DE COLA CIRCULAR. Una cola circular es una estructura de datos lineal y esttica, que permite insertar datos en los espacios generados por el mtodo eliminar() de la clase cola, una vez que se haya alcanzado la capacidad mxima(maxColac). UNIVERSIDAD PBLICA DE EL ALTO ING. DE SISTEMAS ESTRUCTURA DE DATOS 2 Ing. Pascual Yana Chejo CARACTERSTICAS UNA COLA CIRCULAR. Una cola circular es una estructura de datos en la que los datos estarn organizados lgicamente de forma circular. - Las eliminaciones, como una cola simple se los realiza por FC (frente). - Las inserciones, se los realiza por el RD (final). Si se hubiera llegado a maxColac, se inserta en los espacios generados por el mtodo eliminar(). - Para las bsquedas y recorridos en las colas circulares, se hace uso de una cola auxiliar. REPRESENTACIN GRFICA DE UNA COLA CIRCULAR. En el presente apartado se representara a las colas circulares mediante vectores o arrays unidimensionales. a) UNIVERSIDAD PBLICA DE EL ALTO ING. DE SISTEMAS ESTRUCTURA DE DATOS 3 Ing. Pascual Yana Chejo b) ELEMENTOS DE UNA COLA CIRCULAR. maxColac: Variable que contiene la capacidad de la cola. COLAC[]: Vector que almacena los datos de la cola. FC: puntero que apunta al primer dato de la cola. RC: puntero que apunta al ltimo dato de la cola. IMPLEMENTACIN DE LA ESTRUCTURA COLA CIRCULAR EN JAVA. Con fines didcticos la implementacin de la cola circular se realiza a travs de dos clases: principal y colaCircular. I. CLASE PRINCIPAL EN JAVA. Crea una cola circular CC1 y revalida el trabajo de las operaciones definidas sobre ella. public class Principal { public static void main(String[] args) { ColaCircular CC1=new ColaCircular(); // crea el objeto cola. // Agrega cdigo necesario para resolucin de // problemas con colas } } UNIVERSIDAD PBLICA DE EL ALTO ING. DE SISTEMAS ESTRUCTURA DE DATOS 4 Ing. Pascual Yana Chejo II.CLASE COLA CIRCULAR EN JAVA. Define los atributos y los mtodos propios de una cola circular. public class ColaCircular { // Agregue aqu los atributos y mtodos que // conformar la estructura de datos COLA SIMPLE } ATRIBUTOS DE LA ESTRUCTURA COLA CIRCULAR. Se define los elementos de la cola, como son las variables: public class ColaCircular { final int MaxColac = 100; // define el tamao de la cola int[] COLAC; // define un vector que almacenara los datos int FC; // define los punteros frente int RC; // y final de la cola //Agregue aqu los mtodos (operaciones) que se desarrollen // en clases. } OPERACIONES DEFINIDOS SOBRE COLAS. Las operaciones que se definen sobre una cola simple son: 1. OPERACIONES DE ESTADO. a. CREAR E INICIALIZAR COLA CIRCULAR [CONSTRUCTOR]. UNIVERSIDAD PBLICA DE EL ALTO ING. DE SISTEMAS ESTRUCTURA DE DATOS 5 Ing. Pascual Yana Chejo public ColaCircular() { COLAC = new int[MaxColac]; FC = -1; RC = -1; } b. COLA CIRCULAR VACA, Devuelve verdadero si no existe ningn elemento en la cola. public boolean ColaVacia() { return ((FC == -1) && (RC == -1)); } c. TAMAO DE COLA CIRCULAR. Devuelve el nmero de elementos que posee la cola. public int Tamao() { if (ColaVacia()) return (RC - FC + MaxColac) % MaxColac; return ((RC - FC + MaxColac) % MaxColac) + 1; } d. COLA CIRCULAR LLENA. Devuelve verdadero si la cola est llena. public boolean ColaLlena() { return Tamao() == MaxColac; } 2. OPERACIONES FUNDAMENTALES a. INSERTAR UN ELEMENTO EN LA COLA CIRCULAR. Inserta un elemento por el FINAL [RC] en la cola. UNIVERSIDAD PBLICA DE EL ALTO ING. DE SISTEMAS ESTRUCTURA DE DATOS 6 Ing. Pascual Yana Chejo public void Insertar(int x) { if (ColaLlena()) { System.out.println("Cola Llena! No se pudo adicionar."); } else { if ((FC == -1) && (RC == -1)) { RC = RC + 1; COLAC[RC] = x; FC = 0; } else { if (RC == (MaxColac - 1)) { RC = 0; COLAC[RC] = x; } else { RC = RC + 1; COLAC[RC] = x; } } } } b. ELIMINAR UN ELEMENTO DE LA COLA CIRCULAR. Elimina un elemento por FRENTE [FC] en la cola. public int Eliminar() { int x = -1; if (ColaVacia()) { System.out.println("Cola Vacia! No se pudo eliminar."); } else { if (RC == FC) { x = COLAC[FC]; UNIVERSIDAD PBLICA DE EL ALTO ING. DE SISTEMAS ESTRUCTURA DE DATOS 7 Ing. Pascual Yana Chejo FC = -1; RC = -1; } else { if (FC == (MaxColac - 1)) { x = COLAC[FC]; FC = 0; } else { x = COLAC[FC]; FC = FC + 1; } } } return x; } c. RECORRER COLA CIRCULAR. Muestra todos los elementos de la cola circular (de IZQUIERDA A DERECHA) public void Recorrer() { if (ColaVacia()) { System.out.println("Cola Vacia! No se puede mostrar nada."); } else { ColaCircular CCaux = new ColaCircular(); System.out.print("COLAC: "); while (!ColaVacia()) { int x = Eliminar(); System.out.print(x + " "); CCaux.Insertar(x); } while (!CCaux.ColaVacia()) { Insertar(CCaux.Eliminar()); UNIVERSIDAD PBLICA DE EL ALTO ING. DE SISTEMAS ESTRUCTURA DE DATOS 8 Ing. Pascual Yana Chejo } } } d. BSQUEDA DE UN ELEMENTO. Muestra la ubicacin (ndice) de un elemento dentro de la cola circular. Si se encuentra, caso contrario despliega un mensaje de Error. public void Buscar() { Scanner in = new Scanner(System.in); int pos = -1; int cont = 0; System.out.println("\nIngrese el valor que desea buscar: "); int eb = in.nextInt(); if (ColaVacia()) { System.out.println("Cola Vacia! No se puede Buscar ningn elemento."); } else { ColaCircular CCaux = new ColaCircular(); while (!ColaVacia()) { pos = FC; // guardamos para no perderla int x = Eliminar(); if (x == eb) { cont = cont + 1; System.out.print("\n Se encuentra en la posicin: " + (pos + 1) + " "); CCaux.Insertar(x); } else { CCaux.Insertar(x); } } UNIVERSIDAD PBLICA DE EL ALTO ING. DE SISTEMAS ESTRUCTURA DE DATOS 9 Ing. Pascual Yana Chejo while (!CCaux.ColaVacia()) { Insertar(CCaux.Eliminar()); } } if (pos == -1) { System.out.println(" \nERROR! No existe el elemento en la Cola Circular."); } else { System.out.println(" \nSe encontraron: " + cont + " Elementos"); } } 3. OPERACIONES COMPLEMENTARIAS a. INSERTAR N ELEMENTOS EN LA COLA CIRCULAR. Inserta N elementos por el FINAL en la cola. public void InsertaN() { Scanner in = new Scanner(System.in); System.out.print("Nro.Elementos: "); int n = in.nextInt(); System.out.println("Ingrese elementos:"); for (int i = 0; i < n; i++) { int x = in.nextInt(); Insertar(x); } } EJERCICIOS. UNIVERSIDAD PBLICA DE EL ALTO ING. DE SISTEMAS ESTRUCTURA DE DATOS 10 Ing. Pascual Yana Chejo a. Desarrollar un mtodo que permita mostrar el primer elemento de la cola. b. Desarrollar un mtodo que permita mostrar el ltimo elemento de la cola. c. Desarrollar un mtodo que permita eliminar N primeros elementos de la cola. d. Desarrollar un mtodo que permita cargar con N elementos aleatorios a la cola.