Búsqueda por palabras claves

No se olviden de consultar por palabras claves! Ejemplo de Estructura de datos en java, tutorial de estructura de datos
Búsqueda personalizada
Mostrando entradas con la etiqueta listar. Mostrar todas las entradas
Mostrando entradas con la etiqueta listar. Mostrar todas las entradas

jueves, 17 de octubre de 2019

Ejercicios de estructura de datos colas

Para resolver un ejercicio de colas necesitamos de ciertas clases como son: Entidad (Paciente, Persona, Auto, Transacción, etc) dependiendo del tipo de ejercicio. Nodo (Nodo de Paciente) Cola (Colección de Nodos) Principal (Programa invocante) Creamos un nuevo proyecto y sobre este creamos una nueva clase en este caso vamos a generar una cola de pacientes Implementación de la clase Paciente.
package prycolas;

import java.time.LocalTime; 

public class Paciente {
    private String cedula;
    private String nombre;
    private LocalTime hora;
 public Paciente(String cedula, String nombre) {
  super();
  this.cedula = cedula;
  this.nombre = nombre;
  hora=LocalTime.now();
 }
 public String getCedula() {
  return cedula;
 }
 public void setCedula(String cedula) {
  this.cedula = cedula;
 }
 public String getNombre() {
  return nombre;
 }
 public void setNombre(String nombre) {
  this.nombre = nombre;
 }
 public String getHora() {
  return " "+hora.getHour()+":"+hora.getMinute()
  +"-"+hora.getSecond();
 }
 public void setHora(LocalTime hora) {
  this.hora = hora;
 }    
}
Implementación de la clase Nodo de Pacientes.
package prycolas;

public class Nodo {
 private Paciente dato;
 private Nodo siguiente;
 
 public Nodo(Paciente dato, Nodo siguiente) {
  super();
  this.dato = dato;
  this.siguiente = siguiente;
 }

 public Paciente getDato() {
  return dato;
 }

 public void setDato(Paciente dato) {
  this.dato = dato;
 }

 public Nodo getSiguiente() {
  return siguiente;
 }

 public void setSiguiente(Nodo siguiente) {
  this.siguiente = siguiente;
 }
}
Implementación de la clase Cola con sus métodos para insertar, extraer, listar, verificar si está vacía
package prycolas;

public class Cola {

    private Nodo inicio;
    private Nodo fin;

    public Cola() {
        super();
        inicio = fin = null;
    }

    public boolean esVacia() {
        return inicio == fin && fin == null;
    }

    public void encolar(Paciente p) {
        Nodo n = new Nodo(p, null);
        if (esVacia()) {
            inicio = fin = n;
        } else {
            fin.setSiguiente(n);
            fin = n;
        }
    }

    public Paciente desencolar() throws Exception {

        if (esVacia()) {
            throw new Exception("No hay elementos en la cola");
        }
        Nodo aux = inicio;
        inicio = inicio.getSiguiente();
        if (inicio == null) {
            fin = inicio;
        }
        return aux.getDato();
    }

    public void imprimir() throws Exception {
        if (esVacia()) {
            throw new Exception(" Cola vacia");
        }
        Nodo aux = inicio;
        while (aux != null) {
            System.out.println(aux.getDato().getNombre()
                    + " llego a las " + aux.getDato().getHora());
            aux = aux.getSiguiente();
        }
    }
}
Invocación desde el programa principal creando un objeto cola, el cual tiene un menú de opciones
package prycolas;

import java.util.Random;
import java.util.Scanner;

public class Principal {

    private static int leerEntero(String mensaje, int min, int max) {
        Scanner ingreso = new Scanner(System.in);
        int dato;
        do {
            System.out.println(mensaje + "entre " + min + " y " + max);
            dato = ingreso.nextInt();

        } while (dato < min || dato > max);
        return dato;
    }

    private static String leerString(String mensaje) {
        Scanner ingreso = new Scanner(System.in);
        String dato;
        System.out.println(mensaje);
        dato = ingreso.nextLine();

        return dato;
    }

    public static int menu() {
        System.out.println("Menú Opciones");
        System.out.println("1. Encolar cliente");
        System.out.println("2. Atender cliente");
        System.out.println("3. Imprimir cola de clientes");
        System.out.println("4. Salir");
        int opcion = leerEntero("Seleccione una opcion", 1, 4);
        return opcion;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Cola clientes = new Cola();
        int op;
        do {
            op = menu();
            switch (op) {
                case 1:
                    String cedula=leerString("Ingrese la cédula: ");
                    String nombre=leerString("Ingrese el nombre: ");
                    clientes.encolar(new Paciente(cedula,nombre));
                    break;
                case 2:
                    try {
                        Random aleatorio = new Random();
                        Paciente sale = clientes.desencolar();
                        System.out.println("Atendiendo a "+sale.getNombre()+" espere ...");
                        int tiempo_atencion=1000+aleatorio.nextInt(10000);
                        Thread.sleep(tiempo_atencion);
                                              
                        System.out.println(sale.getNombre()+ " fue atendido en "+tiempo_atencion/1000+"seg");
                        
                    } catch (InterruptedException e) {
                        System.out.println(e.getMessage());
                    }catch (Exception e) {
                        System.out.println(e.getMessage());
                    }

                    break;
                case 3:
                    System.out.println("Pacientes en cola ");
                    try {
                        clientes.imprimir();
                    } catch (Exception e) {
                        System.out.println(e.getMessage());
                    }
                    break;
                case 4:
                    break;

            }
        } while (op != 4);

    }

}