Listas Enlazadas Dobles Taller

UNIVERSIDAD DE CÓRDOBA. PROGRAMA INGENIERÍA DE SISTEMAS Listas enlazadas dobles Realizado por Javier David Sánchez Ca

Views 78 Downloads 6 File size 535KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

UNIVERSIDAD DE CÓRDOBA. PROGRAMA INGENIERÍA DE SISTEMAS

Listas enlazadas dobles

Realizado por

Javier David Sánchez Calderón

Nicolas Andres Aleman Mestra

Asignatura: Programación II

Licenciado: Pedro Guevara

Universidad de Córdoba

Ingeniería de sistemas

Montería - Córdoba 2017

 Diseño de clase de la solucion.



Implementación de la clase Nodo en el fichero Nodo.java:

public class Nodo { private int id; private String nombre; private String sexo; private byte grado; private byte edad; private Nodo siguiente; //Se declara un apuntador hacia delante del nodo. private Nodo anterior; //y otro apuntador hacia atrás del nodo.

public Nodo() { id = 0; nombre = ""; sexo = ""; grado = 0; edad = 0; siguiente = null; anterior = null; }

public int getId() { return id; }

public void setId(int ide) { id = ide; }

public String getNombre() {

return nombre; }

public void setNombre(String nom) { nombre = nom; }

public String getSexo() { return sexo; }

public void setSexo(String sex) { sexo = sex; }

public byte getGrado() { return grado; }

public void setGrado(byte grad) { grado = grad; }

public byte getEdad() { return edad; }

public void setEdad(byte edad) { this.edad = edad;

public Nodo getSiguiente() { return siguiente; }

public void setSiguiente(Nodo sig) { siguiente = sig; }

public Nodo getAnterior() { return anterior; }

public void setAnterior(Nodo ante) { anterior = ante; }

}



Implementación de la clase TallerColegio2 en el fichero Tallercolegio2.java:

public class TallerColegio2 { private Nodo cabeza; //Se declara el atributo de la clase, cabeza primer nodo de la lista. //Método constructor de la clase TallerColegio2 public TallerColegio2() { cabeza = null; } //Implementación del método para obtener el primer nodo de la lista (nodo cabeza). public Nodo getCabeza() { return cabeza;

//Implementación del método que asigna el primer nodo de la lista (nodo cabeza). public void setCabeza(Nodo cab) { cabeza = cab; } //Método que recorre la lista y devuelve el último nodo de la lista public Nodo ultimo(){ Nodo temp = cabeza; while (temp != null){ if(temp.getSiguiente()==null){ break; }else{ temp= temp.getSiguiente(); } } return temp; } //Este método devuelve el nodo que se encuentra antes (anterior) de un nodo pasado como //parámetro. En este caso devuelve el nodo que esta antes del nodo a eliminar. public Nodo anterior(Nodo nd){ Nodo temp = cabeza; while(temp != null){ if(temp.getSiguiente()==nd){ break; }else{ temp=temp.getSiguiente(); } } return temp;

//Método para agregar un nuevo nodo en la lista, por el final. public void agregarPorElFinal(Nodo nuevo){ Nodo temp = ultimo(); if(temp != null){ temp.setSiguiente(nuevo); nuevo.setAnterior(temp); nuevo.setSiguiente(null); }else{ nuevo.setAnterior(null); cabeza = nuevo; } } //Método para agregar nodos entre dos nodos ya existentes en la lista enlazada doble. public void agregarEntreNodos(Nodo nd, Nodo nuevo){ nuevo.setSiguiente(nd.getSiguiente()); if(nd.getSiguiente() != null){ nd.getSiguiente().setAnterior(nuevo); } nd.setSiguiente(nuevo); nuevo.setAnterior(nd); } //Método para agregar nodos por la cabeza de la lista enlazada doble. public void agregarCabeza(Nodo nuevo){ if(cabeza==null){ cabeza = nuevo; }else{ nuevo.setAnterior(null); nuevo.setSiguiente(cabeza);

cabeza.setAnterior(nuevo); cabeza = nuevo; } } //Busca un nodo en la lista enlazada doble desde la cabeza (inicio) hasta el último nodo de la lista, //se pasa como parámetro de búsqueda la identificación del estudiante. public Nodo buscarPorId(int id){ Nodo temp = cabeza; while(temp != null){ if(temp.getId()==id){ break; }else{ temp=temp.getSiguiente(); } } return temp; } //Busca un nodo en la lista enlazada doble desde el final hasta el inicio del nodo de la lista, //se pasa como parámetro de búsqueda el nombre del estudiante. public Nodo buscarPorNombre(String nombre){ Nodo temp = ultimo(); while(temp != null){ if(temp.getNombre().equals(nombre)){ break; }else{ temp=temp.getAnterior(); } } return temp;

} //Método que eliminar un nodo de la lista enlazada doble. public void eliminar(Nodo nd){ Nodo ante; if(nd==cabeza){ //En caso de que el nodo a eliminar sea el primer nodo de la lista doble cabeza=cabeza.getSiguiente(); if (cabeza != null){ cabeza.setAnterior(null); } }else{ //De lo contrario, se busca el nodo anterior al que se quiere eliminar (nd) ante=anterior(nd); ante.setSiguiente(nd.getSiguiente()); if(nd.getSiguiente() != null){ nd.getSiguiente().setAnterior(ante); } } nd.setAnterior(null); nd.setSiguiente(null); } //Método que muestra los estudiantes de mayor edad de la lista enlazada doble. public String mayorEdad(){ String mostrar =""; int cont=0; byte mayor =0; byte edad; Nodo temp = cabeza; while(temp != null){ if(temp.getGrado()== 1 || temp.getGrado()== 5){ edad=temp.getEdad();

if(edad>mayor ){ mayor=edad; if (edad == temp.getEdad()){ mostrar+="Nombre: "+temp.getNombre()+" "+"Sexo: "+temp.getSexo()+" "+"Edad: "+temp.getEdad()+" Grado: "+temp.getGrado()+"°\n"; } }

} temp=temp.getSiguiente(); } return mostrar; } //Método que cuenta la cantidad de mujeres en el grado 5 de la lista enlazada doble. public int contarMujeres5(){ Nodo temp = cabeza; int contar = 0; while(temp != null){ if((temp.getSexo().equalsIgnoreCase("F") && temp.getGrado()==5)){ contar++; } temp=temp.getSiguiente(); } return contar; } //Método que saca el promedio de edad de la lista enlazada doble. public float promedioEdad(){ int cantidad = 0; float suma = 0;

Nodo temp = cabeza; while(temp != null){ if(temp.getSexo().equalsIgnoreCase("F") && temp.getGrado()==5){ cantidad++; suma=suma+temp.getEdad(); } temp=temp.getSiguiente(); } if(cantidad >0){ return suma/cantidad; }else{ return 0; } } //Método que cuenta los estudiantes hombres de grado 1 de la lista enlazada doble. public int contarHombreGrado1(){ Nodo temp = cabeza; int contar = 0; while(temp != null){ if(temp.getSexo().equalsIgnoreCase("M") && temp.getGrado()==1){ contar++; } temp=temp.getSiguiente(); } return contar; }

//Método que cuenta las estudiantes mujeres de grado 1 de la lista enlazada doble. public int contarMujeresGrado1(){ Nodo temp = ultimo(); int contar = 0; while(temp != null){ if(temp.getSexo().equalsIgnoreCase("F") && temp.getGrado()==1){ contar++; } temp=temp.getAnterior(); } return contar; } }



Implementación de la clase MainTallerColegio2 en el fichero MainTallerColegio2.java:

public class MainTallerColegio2 { //Se declaran los siguientes métodos, que serán llamados dentro del método static void main: //Método para asignar los valores a los atributos de la clase Nodo. public static void llenar(Nodo nod){ int id; String nombre,sexo; byte grado,edad; id = Integer.parseInt(JOptionPane.showInputDialog("Digite la identificacion del estudiante")); nod.setId(id); nombre = JOptionPane.showInputDialog("Digite el nombre del estudiante"); nod.setNombre(nombre); sexo = JOptionPane.showInputDialog("Digite el sexo del estudiante, ''M'' si es masculino o ''F'' si es femenino"); nod.setSexo(sexo);

grado = Byte.parseByte(JOptionPane.showInputDialog("Digite el grado del estudiante de 1° hasta 5°")); nod.setGrado(grado); edad = Byte.parseByte(JOptionPane.showInputDialog("Digite la edad del estudiante ''debe ser mayor de 6 años''")); nod.setEdad(edad); } //Método para obtener y mostrar los valores asignados a los atributos de la clase Nodo. public static void mostrar(Nodo nod){ String datosNodo=""; datosNodo= datosNodo+String.valueOf("IDENTIFICACIÓN: "+nod.getId()+"\n"+"NOMBRE: "+nod.getNombre()+"\n"+"SEXO: "+nod.getSexo()+"\n"+"GRADO: "+nod.getGrado()+"\n"+"EDAD: "+nod.getEdad()+"\n\n"); JOptionPane.showMessageDialog(null,"INFORMACION DE LOS ESTUDIANTES EN LA LISTA"+"\n"+datosNodo); } //Método para obtener y mostrar los valores asignados a los atributos identificación y nombre de la clase Nodo. public static void mostrarGrados(Nodo nod){ String datosNodo=""; datosNodo= datosNodo+String.valueOf("IDENTIFICACIÓN: "+nod.getId()+"\n"+"NOMBRE: "+nod.getNombre()+"\n\n"); JOptionPane.showMessageDialog(null,"INFORMACION DE LOS ESTUDIANTES EN LA LISTA"+"\n"+datosNodo); } //Método para obtener y mostrar los valores asignados a los atributos nombre de la clase Nodo. public static void mostrarMujeresGrado5(Nodo nod){ String datosNodo=""; datosNodo= datosNodo+String.valueOf("NOMBRE: "+nod.getNombre()+"\n\n"); JOptionPane.showMessageDialog(null,"MUJERES QUE CURSAN QUINTO DE PRIMARIA"+"\n"+datosNodo); }

//Método para listar los estudiantes de grado 2 de la lista y visualizarlos en pantalla. public static void listarG2(Nodo nod){ Nodo temp=nod; while(temp!=null){ if(temp.getGrado() == 2){ mostrarGrados(temp); } else{ JOptionPane.showMessageDialog(null,"No hay estudiantes en la lista"); } temp=temp.getSiguiente(); } } //Método para listar los estudiantes de grado 3 de la lista y visualizarlos en pantalla. public static void listarG3(Nodo nod){ TallerColegio2 lista = new TallerColegio2(); Nodo temp=nod; while(temp!=null){ if(temp.getGrado() == 3){ mostrarGrados(temp); }else{ JOptionPane.showMessageDialog(null,"No hay estudiantes en la lista"); } temp=temp.getSiguiente(); } }

//Método para listar los estudiantes de grado 4 de la lista y visualizarlos en pantalla. public static void listarG4(Nodo nod){ Nodo temp=nod; while(temp!=null){ if(temp.getGrado() == 4){ mostrarGrados(temp); }else{ JOptionPane.showMessageDialog(null,"No hay estudiantes en la lista"); } temp=temp.getSiguiente(); } } // Método que se puede utilizar para listar la información del grado 1 desde el final de la lista enlazada doble. public static void listarDesdeElFinalG1(Nodo nod){ Nodo temp = nod; while(temp != null){ if(temp.getGrado() == 1){ mostrarGrados(temp); }else{ JOptionPane.showMessageDialog(null,"No hay estudiantes en la lista"); } temp=temp.getAnterior(); } } // Método que se puede utilizar para listar la información del grado 1 desde el final de la lista enlazada doble. public static void listarDesdeElFinalG5(Nodo nod){ Nodo temp = nod;

while(temp != null){ if(temp.getGrado() == 5){ mostrarGrados(temp); }else{ JOptionPane.showMessageDialog(null,"No hay estudiantes en la lista"); } temp=temp.getAnterior(); } } //Método para listar las estudiantes de grado 5 de la lista y visualizarlos en pantalla. public static void listarMujeresGrado5(Nodo nod){ Nodo temp=nod; while(temp!=null){ if((temp.getSexo().equalsIgnoreCase("F") && temp.getGrado()==5)){ mostrarMujeresGrado5(temp); } temp=temp.getSiguiente(); } } //Método para visualizar el menú de opciones y asignar la opción seleccionada. public static int menu(){ int opcion = 0; do{ opcion = Integer.parseInt(JOptionPane.showInputDialog("=========== MENÚ PRINCIPAL =========== \n"+ "1. Agregar, buscar o eliminar estudiante. \n"+"2. Generar reportes de estudiantes. \n"+"3. Salir." +"\n \n Seleccione una opción del 1 al 3:")); }while(opcion 3); return opcion; }

//Método para visualizar el submenú de opciones y asignar la opción seleccionada. public static int subMenu1(){ int opcion = 0; do{ opcion = Integer.parseInt(JOptionPane.showInputDialog("=========== AGREGAR,BUSCAR O ELIMINAR =========== \n"+ "1. Agregar informacion de estudiante por el final de la lista. \n"+"2. Agregar informacion de estudiante entre dos estudiantes. \n"+ "3. Agregar informacion de estudiante por el principio de la lista. \n"+"4. Buscar la informacion de un estudiante por identificacion. \n"+ "5. Buscar informacion de un estudiante por nombre. \n"+"6. Eliminar información de los estudiantes que terminaron grado 5°. \n"+"7. Regresar al menú principal."+"\n \n Seleccione una opción del 1 al 7:")); }while(opcion 7); return opcion; } //Método para visualizar el submenú de opciones y asignar la opción seleccionada. public static int subMenu2(){ int opcion = 0; do{ opcion = Integer.parseInt(JOptionPane.showInputDialog("=========== GENERAR REPORTES =========== \n"+ "1. Listar nombre y sexo de los estudiantes de mayor edad en los grados 1° y 5°. \n"+"2. Listar nombres de las estudiantes de grado 5°, cantidad y edad promedio. \n"+ "3. Cantidad de mujeres y hombres que ingresan al primer grado. \n"+"4. Listar informacion por grado. \n"+ "5. Regresar al menú principal. \n"+"\n \n Seleccione una opción del 1 al 5:")); }while(opcion 5); return opcion; } //Método para visualizar el submenú de opciones y asignar la opción seleccionada. public static int subMenu3(){ int opcion = 0; do{ opcion = Integer.parseInt(JOptionPane.showInputDialog("=========== LISTAR ALUMNOS POR GRADOS =========== \n"+ "1. Grado 1°. \n"+"2. Grado 2°. \n"+ "3. Grado 3°. \n"+"4. Grado 4°. \n"+ "5. Grado 5°. \n"+"6. regresar al menú 'generar reportes'."+"\n \n Seleccione una opción del 1 al 6:")); }while(opcion 6);

return opcion; } public static void main(String[] args) { //Se crea el objeto lis de la clase TallerColegio2. TallerColegio2 lis = new TallerColegio2 (); int opcion,cod; String nom; Nodo aux; do{ opcion = menu(); switch(opcion){ case 1: do{ opcion = subMenu1(); switch(opcion){ case 1: aux = new Nodo();//Cuando se agrega un nodo se crea un nuevo objeto de la clase nodo. llenar(aux); if(aux.getEdad()>5){ if(aux.getGrado()5){ if(aux.getGrado()5){ if(aux.getGrado()