diff --git a/src/main/java/com/utp/clsEstructuraDatos/colas/colasproy.java b/src/main/java/com/utp/clsEstructuraDatos/colas/colasproy.java index 3727e74..303e591 100644 --- a/src/main/java/com/utp/clsEstructuraDatos/colas/colasproy.java +++ b/src/main/java/com/utp/clsEstructuraDatos/colas/colasproy.java @@ -1,197 +1,273 @@ package com.utp.clsEstructuraDatos.colas; -import java.util.LinkedList; -import java.util.Queue; import java.util.Scanner; public class colasproy { - public static void main(String[] args) { - new TerminalColasApp().run(); + // Cola Lineal + private static int[] colaLineal = new int[5]; + private static int frenteLineal = -1; + private static int finalColaLineal = -1; + private static final int capacidadLineal = 5; + + private static void contenidoColaLineal() // MOSTRAR CONTENIDO DE LA COLA + { + System.out.println("Contenido de la cola lineal: "); + if (frenteLineal == -1) { + System.out.println("La cola está vacía"); + } else { + System.out.print("[ "); + for (int i = frenteLineal; i <= finalColaLineal; i++) { + System.out.print(colaLineal[i] + " "); + } + System.out.println("]"); + } + } + + private static void insercionColaLineal(int num) // INSERCIÓN DE CONTENIDO A LA COLA + { + System.out.println("\nInserción de contenido en la cola lineal:"); + System.out.println("-------------------------------"); + System.out.println("Estado de la cola antes de la inserción:"); + contenidoColaLineal(); + + if (frenteLineal == -1) + frenteLineal = 0; + + colaLineal[++finalColaLineal] = num; + + System.out.println("\nEl número " + num + " ha sido insertado en la cola lineal."); + System.out.println("Estado de la cola después de la inserción:"); + contenidoColaLineal(); } -} - -class TerminalColasApp { - private AbstractCola cola; - private Scanner scanner = new Scanner(System.in); - - public void run() { - while (true) { - showMenu(); - int choice = getUserInputInt("Seleccione una opción: "); - switch (choice) { - case 1 -> seleccionarTipoCola(); - case 2 -> insertar(); - case 3 -> quitar(); - case 4 -> { - System.out.println("Saliendo..."); - return; - } - default -> System.out.println("Opción no válida."); + + private static void eliminacionColaLineal() // ELIMINACIÓN DE CONTENIDO EN LA COLA + { + System.out.println("\nEliminación de contenido en la cola lineal:"); + System.out.println("------------------------------------------"); + if (!colaLinealVacia()) { + int numEliminado = colaLineal[frenteLineal++]; + if (frenteLineal > finalColaLineal) { + frenteLineal = finalColaLineal = -1; } - mostrar(); + System.out.println("El número eliminado es: " + numEliminado); + System.out.println("Estado de la cola después de la eliminación:"); + contenidoColaLineal(); + } else { + System.out.println("La cola está vacía. No se puede eliminar ningún elemento."); } } - private void showMenu() { - System.out.println("\n1. Seleccionar tipo de cola (circular o estándar)"); - System.out.println("2. Insertar elemento"); - System.out.println("3. Quitar elemento"); - System.out.println("4. Salir"); + private static boolean colaLinealVacia() { + return frenteLineal == -1; } - private void seleccionarTipoCola() { - int capacidad = getUserInputInt("Ingrese la capacidad de la cola: "); - int tipo = getUserInputInt("1. Cola Circular\n2. Cola Estándar\nSeleccione el tipo de cola: "); - cola = (tipo == 1) ? new ColaCircular<>(capacidad) : new ColaSimple<>(capacidad); - System.out.println("Cola creada: " + (tipo == 1 ? "Circular" : "Estándar")); + private static boolean colaLinealLlena() { + return finalColaLineal == capacidadLineal - 1; } - private void insertar() { - if (cola == null) { - System.out.println("Primero debe seleccionar el tipo de cola."); - return; - } - int elemento = getUserInputInt("Ingrese el elemento a insertar: "); - try { - cola.insertar(elemento); - System.out.println("Elemento insertado: " + elemento); - } catch (IllegalStateException e) { - System.out.println("Error: La cola está llena."); - } + private static int frenteColaLineal() { + return colaLineal[frenteLineal]; } - private void quitar() { - if (cola == null) { - System.out.println("Primero debe seleccionar el tipo de cola."); - return; - } - try { - int elemento = cola.quitar(); - System.out.println("Elemento quitado: " + elemento); - } catch (IllegalStateException e) { - System.out.println("Error: La cola está vacía."); + // COLA CIRCULAR + private static final int capacidadCircular = 5; + private static int[] colaCircular = new int[capacidadCircular]; + private static int frenteCircular = 0; + private static int finalColaCircular = -1; + private static int sizeCircular = 0; + + private static void contenidoColaCircular() { + System.out.println("\nContenido de la cola circular:"); + + if (sizeCircular == 0) { + System.out.println("La cola está vacía."); + } else { + System.out.println("Elementos de la cola circular:"); + + for (int i = 0; i < sizeCircular; i++) { + System.out.print(colaCircular[(frenteCircular + i) % capacidadCircular] + " "); + } + System.out.println(); } } - private void mostrar() { - if (cola != null) { - System.out.println("Estado de la cola: " + cola); + private static void insercionColaCircular(int num) // INSERCIÓN DE CONTENIDO A LA COLA + { + System.out.println("\nInserción de contenido en la cola circular:"); + System.out.println("-------------------------------------------"); + + if (!colaCircularLlena()) { + finalColaCircular = (finalColaCircular + 1) % capacidadCircular; + colaCircular[finalColaCircular] = num; + sizeCircular++; + System.out.println("El número " + num + " ha sido insertado en la cola circular."); + System.out.println("Estado de la cola circular después de la inserción:"); + contenidoColaCircular(); + } else { + System.out.println("Desbordamiento! No se puede insertar el número. La cola está llena."); } } - private int getUserInputInt(String prompt) { - System.out.print(prompt); - while (!scanner.hasNextInt()) { - System.out.print("Entrada no válida. " + prompt); - scanner.next(); + private static void eliminacionColaCircular() // ELIMINACIÓN DE CONTENIDO EN LA COLA + { + System.out.println("\nEliminación de contenido en la cola circular:"); + System.out.println("--------------------------------------------"); + + if (!colaCircularVacia()) { + int numeroEliminado = colaCircular[frenteCircular]; + frenteCircular = (frenteCircular + 1) % capacidadCircular; + sizeCircular--; + System.out.println("El número eliminado es: " + numeroEliminado); + System.out.println("Estado de la cola circular después de la eliminación:"); + contenidoColaCircular(); + } else { + System.out.println("Subdesbordamiento! No se puede eliminar ningún elemento. La cola está vacía."); } - return scanner.nextInt(); } -} - -// Estructuras de datos (ColaSimple y ColaCircular) -abstract class AbstractCola { - protected int capacidad, longitud; - public AbstractCola(int capacidad) { - this.capacidad = capacidad; + private static boolean colaCircularVacia() { + return sizeCircular == 0; } - public int capacity() { - return capacidad; + private static boolean colaCircularLlena() { + return sizeCircular == capacidadCircular; } - public int len() { - return longitud; + private static int frenteColaCircular() { + return colaCircular[frenteCircular]; } - public abstract void insertar(T elemento); + public static void main(String[] args) { + Scanner objLeer = new Scanner(System.in); - public abstract T quitar(); + // MENÚ DE OPCIONES + int opcion = 0; + while (opcion != 3) { + System.out.println("\nMenú de opciones"); + System.out.println("1. Cola Lineal"); + System.out.println("2. Cola Circular"); + System.out.println("3. Salir"); + System.out.println("Opción: "); + opcion = objLeer.nextInt(); - public abstract void limpiar(); + switch (opcion) { + case 1: + System.out.println("\nMenú de opciones - Cola Lineal\n"); + int opcionCL; + do { + System.out.println("1. Insertar número en la cola"); + System.out.println("2. Eliminar número de la cola"); + System.out.println("3. Mostrar contenido de la cola"); + System.out.println("4. Mostrar número en el frente de la cola"); + System.out.println("5. Volver"); + System.out.print("Opción: "); + opcionCL = objLeer.nextInt(); - @Override - public abstract String toString(); -} + switch (opcionCL) { + case 1: + if (!colaLinealLlena()) { + System.out.print("Ingrese número deseado: "); + int num = objLeer.nextInt(); + insercionColaLineal(num); + System.out.println("El número " + num + " ha sido insertado en la cola lineal"); + } else + System.out.println("Desbordamiento! No se puede insertar el número"); + break; -class ColaSimple extends AbstractCola { - private Queue cola = new LinkedList<>(); + case 2: + if (!colaLinealVacia()) + eliminacionColaLineal(); + else + System.out.println("Subdesbordamiento! No se puede eliminar ningún elemento"); + break; - public ColaSimple(int capacidad) { - super(capacidad); - } + case 3: + contenidoColaLineal(); + break; - @Override - public void insertar(T elemento) { - if (longitud >= capacidad) - throw new IllegalStateException(); - cola.add(elemento); - longitud++; - } + case 4: + if (!colaLinealVacia()) + System.out.println("El número en el frente de la cola es: " + frenteColaLineal()); + else + System.out.println("La cola está vacía"); + break; - @Override - public T quitar() { - if (longitud <= 0) - throw new IllegalStateException(); - longitud--; - return cola.poll(); - } + case 5: + System.out.println("Volviendo al menú principal..."); + break; - @Override - public void limpiar() { - cola.clear(); - longitud = 0; - } + default: + System.out.println("Opción inválida. Intente nuevamente"); + break; + } + } while (opcionCL != 5); + break; - @Override - public String toString() { - return cola.toString(); - } -} + case 2: + System.out.println("\nMenú de opciones - Cola Circular\n"); + int opcionCC; + do { + System.out.println("1. Insertar número en la cola"); + System.out.println("2. Eliminar número de la cola"); + System.out.println("3. Mostrar contenido de la cola"); + System.out.println("4. Mostrar número en el frente de la cola"); + System.out.println("5. Mostrar número en el final de la cola"); + System.out.println("6. Volver"); + System.out.print("Opción: "); + opcionCC = objLeer.nextInt(); -class ColaCircular extends AbstractCola { - private T[] cola; - private int frente = 0, finalCola = 0; + switch (opcionCC) { + case 1: + if (!colaCircularLlena()) { + System.out.print("Ingrese número deseado: "); + int num = objLeer.nextInt(); + insercionColaCircular(num); + System.out.println("El número " + num + " ha sido insertado en la cola circular"); + } - @SuppressWarnings("unchecked") - public ColaCircular(int capacidad) { - super(capacidad); - this.cola = (T[]) new Object[capacidad]; - } + else + System.out.println("Desbordamiento! No se puede insertar el número"); + break; - @Override - public void insertar(T elemento) { - if (longitud >= capacidad) - throw new IllegalStateException(); - cola[finalCola] = elemento; - finalCola = (finalCola + 1) % capacidad; - longitud++; - } + case 2: + if (!colaCircularVacia()) + eliminacionColaCircular(); + else + System.out.println("Subdesbordamiento! No se puede eliminar ningún elemento"); + break; - @Override - public T quitar() { - if (longitud <= 0) - throw new IllegalStateException(); - T elemento = cola[frente]; - frente = (frente + 1) % capacidad; - longitud--; - return elemento; - } + case 3: + contenidoColaCircular(); + break; - @Override - public void limpiar() { - frente = finalCola = longitud = 0; - } + case 4: + if (!colaCircularVacia()) + System.out.println("El número en el frente de la cola es: " + frenteColaCircular()); + else + System.out.println("La cola está vacía"); + break; - @Override - public String toString() { - StringBuilder sb = new StringBuilder("["); - for (int i = 0; i < longitud; i++) { - sb.append(cola[(frente + i) % capacidad]); - if (i < longitud - 1) - sb.append(", "); + case 5: + if (!colaCircularVacia()) + System.out.println( + "El número en el final de la cola es: " + colaCircular[finalColaCircular]); + else + System.out.println("La cola está vacía"); + break; + + case 6: + System.out.println("Volviendo al menú principal..."); + break; + + default: + System.out.println("Opción inválida. Intente nuevamente"); + break; + } + } while (opcionCC != 6); + break; + + } } - return sb.append("]").toString(); + objLeer.close(); } -} +} \ No newline at end of file