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 listas simples java. Mostrar todas las entradas
Mostrando entradas con la etiqueta listas simples java. Mostrar todas las entradas

lunes, 23 de noviembre de 2015

Lectura de archivos java y pasar a una Lista Simplemente enlazada

Ejemplo de lectura de archivos y Lista Simples

En este ejemplo se muestra cómo realizar la lectura de datos desde un archivo, cada línea del archivo contiene campos que se encuentran separados por un caracter especial, una vez que se lee la línea se debe separar cada uno de las palabras y pasarlos a ser almacenados en una Lista simplemente enlazada que va creciendo dinámicamente.

 Crear en Eclipse un nuevo proyecto de java, en mi caso LecturaArchivo.  A continuación se presenta la imagen del proyecto.


En un archivo de texto voy a tener el siguiente contenido:


Crear la Clase Nodo 

public class Nodo {
      private String palabra;
      private Nodo siguiente;
 public Nodo(String palabra, Nodo siguiente) {
  super();
  this.palabra = palabra;
  this.siguiente = siguiente;
 }
 public String getPalabra() {
  return palabra;
 }
 public void setPalabra(String palabra) {
  this.palabra = palabra;
 }
 public Nodo getSiguiente() {
  return siguiente;
 }
 public void setSiguiente(Nodo siguiente) {
  this.siguiente = siguiente;
 }
       
}
Crear la Clase Lista
Para esta clase vamos a crear cuatro métodos principales el agregarNodoFinal la cual se encarga de ir creando un nodo dinámicamente al final de la lista, la cual contiene una palabra leida desde el fichero. El segundo método es imprimir la lista en pantalla para verificar que se guardó la información en la lista simple. Un tercer método que se va encargar de leer un archivo que se le pasa el path/ubicación por parámetro y lo que hace es ir leyendo linea a linea y en un texto auxiliar se va acumulando los Strings, Finalmente se separan el texto auxiliar que tiene acumulado todo el texto del fichero y se separa cada una de las palabras.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.StringTokenizer;


public class Lista {
 Nodo inicio;
 Nodo fin;
 public Lista() {
  
  inicio=fin=null;
 }
 
 public void agregarNodoFinal(String dato){
  Nodo nuevo=new Nodo(dato,null);
  if(inicio==null){
   inicio=fin=nuevo;
  }else{
   fin.setSiguiente(nuevo);
   fin=nuevo;
   
  }
  
 }
 
 public void imprimir(){
  Nodo aux=inicio;
  while(aux!=null){
   System.out.println(aux.getPalabra());
   aux=aux.getSiguiente();
  }      
 }
 
 
 public String leerArchivo(String path){
  
  String total="";
  try {
   FileReader fr=new FileReader(new File(path));
   BufferedReader br=new BufferedReader(fr);
   
   String linea="";
   while(  (linea=br.readLine())!=null){
    total=total+linea+"\n";
    
   }
   
   
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   System.out.println("Problemas de archivo: "+e.getMessage());
  } catch (IOException e) {
   // TODO Auto-generated catch block
   System.out.println("Problemas en la lectura del archivo: "+e.getMessage());
  }
  
  return total;
  
  
 }
 
 
 public Lista separar(String total){
  System.out.println(total);
  Lista coleccion=new Lista();
  StringTokenizer st = new StringTokenizer(total, " \n,");
        while (st.hasMoreTokens()) {
            String palabra = st.nextToken();
            coleccion.agregarNodoFinal(palabra);
       }
  return coleccion;
  
 }
 
 

}

La clase Principal (Lectura) consta del siguiente código:

public class Lectura {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Lista inform=new Lista();
        String total=inform.leerArchivo("texto.txt");
        Lista resultado=inform.separar(total);
        resultado.imprimir();
        
    }
    
}

martes, 29 de septiembre de 2015

Estructura de datos java, eliminar nodo, insertar nodo, imprimir

En el siguiente Ejercicio se pretende crear un listado de estudiantes (Curso) utilizando memoria dinámica, específicamente mediante la estructura de datos lista lineal simple, es decir que solo tiene un único enlace. Para el ejercicio se tienen diferentes clases:
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
A continuación se presenta el código de la clase Nodo:
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);
        }
    }
    
}