Skip to content
This repository has been archived by the owner on Aug 9, 2024. It is now read-only.

Commit

Permalink
colas
Browse files Browse the repository at this point in the history
  • Loading branch information
PhilsC8 committed Jun 20, 2024
1 parent bc9552d commit 55daf71
Showing 1 changed file with 197 additions and 0 deletions.
197 changes: 197 additions & 0 deletions src/main/java/com/utp/clsEstructuraDatos/colas/colasproy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
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();
}
}

class TerminalColasApp {
private AbstractCola<Integer> 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.");
}
mostrar();
}
}

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 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 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 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.");
}
}

private void mostrar() {
if (cola != null) {
System.out.println("Estado de la cola: " + cola);
}
}

private int getUserInputInt(String prompt) {
System.out.print(prompt);
while (!scanner.hasNextInt()) {
System.out.print("Entrada no válida. " + prompt);
scanner.next();
}
return scanner.nextInt();
}
}

// Estructuras de datos (ColaSimple y ColaCircular)
abstract class AbstractCola<T> {
protected int capacidad, longitud;

public AbstractCola(int capacidad) {
this.capacidad = capacidad;
}

public int capacity() {
return capacidad;
}

public int len() {
return longitud;
}

public abstract void insertar(T elemento);

public abstract T quitar();

public abstract void limpiar();

@Override
public abstract String toString();
}

class ColaSimple<T> extends AbstractCola<T> {
private Queue<T> cola = new LinkedList<>();

public ColaSimple(int capacidad) {
super(capacidad);
}

@Override
public void insertar(T elemento) {
if (longitud >= capacidad)
throw new IllegalStateException();
cola.add(elemento);
longitud++;
}

@Override
public T quitar() {
if (longitud <= 0)
throw new IllegalStateException();
longitud--;
return cola.poll();
}

@Override
public void limpiar() {
cola.clear();
longitud = 0;
}

@Override
public String toString() {
return cola.toString();
}
}

class ColaCircular<T> extends AbstractCola<T> {
private T[] cola;
private int frente = 0, finalCola = 0;

@SuppressWarnings("unchecked")
public ColaCircular(int capacidad) {
super(capacidad);
this.cola = (T[]) new Object[capacidad];
}

@Override
public void insertar(T elemento) {
if (longitud >= capacidad)
throw new IllegalStateException();
cola[finalCola] = elemento;
finalCola = (finalCola + 1) % capacidad;
longitud++;
}

@Override
public T quitar() {
if (longitud <= 0)
throw new IllegalStateException();
T elemento = cola[frente];
frente = (frente + 1) % capacidad;
longitud--;
return elemento;
}

@Override
public void limpiar() {
frente = finalCola = longitud = 0;
}

@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(", ");
}
return sb.append("]").toString();
}
}

0 comments on commit 55daf71

Please sign in to comment.