1. Estudiante con 3 atributos: nombre, cédula, y edad.
2. Nodo la cual va a contener 2 atributos: Estudiante y siguiente (referencia al nodo siguiente)
3. Lista, es un clase la cual contiene los apuntadores inicio y fin y los métodos de inserción, impresión y eliminación.
4. Clase principal la cual realizará la invocación a la clase lista y demás para verificar su utilización.
A continuación se presenta el código de la clase Estudiante:
package prylistassimple;
public class Estudiante {
private String nombre;
private String cedula;
private int edad;
public Estudiante() {
}
public Estudiante(String nombre, String cedula, int edad) {
this.nombre = nombre;
this.edad = edad;
this.cedula=cedula;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public int getEdad() {
return edad;
}
public void setEdad(int edad) {
this.edad = edad;
}
public String getCedula() {
return cedula;
}
public void setCedula(String cedula) {
this.cedula = cedula;
}
}
No se olviden de consultar por palabras claves! Ejemplo de Estructura de datos en java, tutorial de estructura de datos
Búsqueda personalizada
package prylistassimple;
public class Nodo {
private Estudiante alumno;
private Nodo siguiente;
public Nodo(Estudiante alumno) {
this.alumno = alumno;
siguiente=null;
}
public Nodo(Estudiante alumno, Nodo siguiente) {
this.alumno = alumno;
this.siguiente = siguiente;
}
public Estudiante getAlumno() {
return alumno;
}
public void setAlumno(Estudiante alumno) {
this.alumno = alumno;
}
public Nodo getSiguiente() {
return siguiente;
}
public void setSiguiente(Nodo siguiente) {
this.siguiente = siguiente;
}
}
A continuación se presenta el código de la clase lista:
package prylistassimple;
public class Lista {
Nodo inicio;
Nodo fin;
public Lista() {
inicio = null;
fin = null;
}
public void agregarNodoAlInicio(Estudiante obj) {
Nodo nuevo = new Nodo(obj, inicio);
inicio = nuevo;
if (fin == null) {
fin = nuevo;
}
}
public void agregarNodoAlFinal(Estudiante obj) {
Nodo nuevo = new Nodo(obj);
// nuevo.setSiguiente(null);
if (fin != null) {
fin.setSiguiente(nuevo);
fin = nuevo;
} else {
fin = nuevo;
inicio = nuevo;
}
}
public void recorreLista() {
Nodo aux = inicio;
int cont=1;
while (aux != null) {
System.out.println(cont +". "+aux.getAlumno().getNombre()+ "-"+aux.getAlumno().getCedula());
cont++;
aux = aux.getSiguiente();
}
}
public void eliminarInicio() {
if (inicio != fin) {
Nodo aux = inicio;
inicio = inicio.getSiguiente();
aux = null;
} else {
inicio = null;
fin = null;
}
}
public boolean eliminarNodo(String cedula) {
if (inicio != null) {//Vericación que existan nodos en la lista
if (inicio == fin && inicio.getAlumno().getCedula().compareTo(cedula) == 0) { //Si solo existe un único nodo
inicio = fin = null;
return true;
} else if (inicio.getAlumno().getCedula().compareTo(cedula) == 0) { //Si la cedula se encuentra en el primer nodo
inicio=inicio.getSiguiente(); //Apuntamos el inicio al siguiente nodo
return true;
} else {
//necesitamos dos Nodos
Nodo anterior = inicio; //anterior apuntando al inicio
Nodo temporal = inicio.getSiguiente(); //temporal al siguiente nodo del anterior
//Debemos recorrer todos los nodos de la lista hasta encontrar una cedula o hasta el final (temporal sea null)
while (temporal != null && temporal.getAlumno().getCedula().compareTo(cedula) != 0) {
anterior=anterior.getSiguiente(); //desplazamos al siguiente nodo
temporal=temporal.getSiguiente(); // desplazamos al siguiente nodo de la lista
}
//Cuando llegue a este punto pudo ser si encontró una cédula o llegó al fin
//preguntamos si fue diferente de null (es decir que halló un nodo)
//el proceso es eliminar el nodo donde está el temporal
//Por lo tanto se requiere enlazar el anterior con el enlace siguiente del temporal
if (temporal != null) {
anterior.setSiguiente(temporal.getSiguiente());
if (temporal == fin) { // puede darse el caso que el temporal sea el último nodo por lo que debemos referenciar
fin = anterior; // el nuevo fin hacia el anterior
}
return true;
}
return false;
}
}return false;
}
}
A continuación se presenta el código de la clase Principal:
public class Principal {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Lista coleccion=new Lista();
Estudiante alumnoA=new Estudiante("Juan","12345", 20);
coleccion.agregarNodoAlInicio(alumnoA);
coleccion.agregarNodoAlFinal(new Estudiante("Santiago","1234321", 11));
coleccion.agregarNodoAlInicio(new Estudiante("Anabel","09876", 50));
System.out.println("Imprimir los elementos agregados hasta el momento");
coleccion.recorreLista();
System.out.println("Eliminar inicio");
coleccion.eliminarInicio();
coleccion.recorreLista();
coleccion.agregarNodoAlFinal(new Estudiante("Alberto","7765",80));
System.out.println("Imprimir lista");
coleccion.recorreLista();
String cedula=JOptionPane.showInputDialog("Ingrese la cédula del estudiante a eliminar");
if(coleccion.eliminarNodo(cedula)){
System.out.println("estudiante con cedula No. "+cedula+" borrado");
System.out.println("Listado actual");
coleccion.recorreLista();
}else{
System.out.println("No existe estudiante con cedula No."+cedula);
}
}
}