martes, 10 de diciembre de 2013

LISTA



PRACTICA No.6


CONCEPTO


Es una estructura lineal, dinámica, su acceso es secuencial y esta indicado por un puntero llamado inicio, sus elementos es una sucesión de n nodos y tiene tres operaciones básicas: insertar, eliminar y recorrer.


PROCEDIMIENTO

1.- Primero creamos la clase Nodo en la cual refractamos información y enlace, y colocamos un constructor llamado Nodo.
2.-Elaboramos la clase Lista la cual refractamos inicio, un constructor llamado Lista, tiene ocho métodos: inserta al inicio,inserta al final, insertantes, insertadespues, eliminainicio, eliminafinal, eliminax e imprimir.

DIAGRAMAS UML




CODIFICACIÓN:

Comienza la clase Nodo
package Ortiz;
import javax.swing.JOptionPane;
public class Nodo {
      private String informacion;
      private Nodo enlace;
   
      public Nodo (String x)
      {
          informacion=x;
          enlace=null;
      }
      public Nodo(String x, Nodo n){
        informacion=x;
        enlace=n;
      }
}

Termina la clase Nodo


comienza la clase Lista
package Ortiz;
import javax.swing.JOptionPane;
public class Lista {
   private Nodo inicio;
 
   Lista(){
       inicio=null;
   }
   public Lista InsertarInicio(String informacion){
   Nodo nuevo;
   nuevo= new Nodo(informacion);//crear nuevo nodo(elemento)
   nuevo.setEnlace(getInicio());//enlaza nuevo al frente de la lista
   setInicio(nuevo);//mueve inicio y apunta al nuevo nodo
   return this;//devuelve la referencia del objeto lista
   }
   public Lista InsertarFinal(String informacion){//este metodo funciona si por lo menos la lista tiene un nodo
     Nodo ultimo;
     ultimo=inicio;//ultimo se inicializa al comienza de la lista
     while(ultimo.getEnlace() !=null){//recorrido para buscar el ultimo nodo
     ultimo=ultimo.getEnlace();//ultimo toma la direccion del nodo siguiente
     }
     ultimo.setEnlace(new Nodo (informacion)); //se crea el nuevo nodo despues del ultimo
     return this;
   }
   public Lista InsertarAntes(String nombre, String ref){//se utilizan parametros
       Nodo nuevo, actual, anterior= null;
       boolean esta=true;
       actual=inicio;//vamos a recorrer la lista con actual
       while (!actual.getEnlace().equals(ref)&& esta){//para comparar dos cadenas
           if(actual.getEnlace()!=null){
           anterior=actual;
           actual=actual.getEnlace();
       }
           else{
               esta=false;
           }
       }
       if(esta){
           if(inicio==actual){//vamos a insertar antes del primer nodo
               nuevo=new Nodo(nombre, inicio);//se llama al segundo constructor
               inicio=nuevo;
           }
     
           else{
               nuevo=new Nodo(nombre, actual);
               anterior.setEnlace(nuevo);
           }
       }
       return this;
   }
  public Lista insertaDespues(String nombre, String ref){
      Nodo nuevo,actual=null;
      boolean esta=true;
      actual=inicio;//es esencial en todo st programa
      while(! actual.getInformacion().equals(ref)&& esta){
          if(actual.getEnlace() !=null)
              actual =actual.getEnlace();
              else{
              esta=false;
              }
          if(esta){
              nuevo=new Nodo (nombre, actual.getEnlace());
              actual.setEnlace(nuevo);
           }
         }
       return this;
     }
  public String eliminaInicio(){
      Nodo x=inicio;
      inicio=inicio.getEnlace();//borrado logico
      return x.getInformacion();
  }
  public String eliminaFinal(){///quitar de la lista l ultimo nodo
      Nodo ultimo,anterior=null;
      ultimo=inicio;
      while(ultimo.getEnlace()!=null){
          anterior=ultimo;
          ultimo=ultimo.getEnlace();
          }
      if(inicio.getEnlace()==null){
          inicio=null;
      }
      else{
      anterior.setEnlace(null);//borrado logico
      }
      return ultimo.getInformacion();
      }
  public void imprimir(){
    String cadena="";
    Nodo q=inicio;
    int i=1;
    while(q !=null){
      cadena+="\n"+i+". "+q.getInformacion();
      q=q.getEnlace();
      i++;
    }
    JOptionPane.showMessageDialog(null, cadena,"Nodos de la lista",JOptionPane.PLAIN_MESSAGE);
}
  public String eliminaX (String x){
      Nodo actual, anterior =null;
      boolean esta=true;
      actual=inicio;
      while(!actual.getInformacion().equals(x)&& esta){
          if(actual.getEnlace()!=null){
              anterior=actual;
              actual.setEnlace(actual.getEnlace());
          }
          else
              esta=false;
      }
      if(esta){
          anterior.setEnlace(actual);//borrado logico
          return actual.getInformacion();
      }
      else
       return " ";
  }
}
Termina la clase Lista

CONCLUSIÓN

En esta práctica aprendimos a utilizar las direcciones de memoria la cual, o es mas eficiente que declarar arreglos pero a su vez mas peligrosa porque si borramos el nodo inicio perdemos la lista completa.
ventaja es que podemos hacer mejor uso de la memoria  y desventaja si pierdes inicio por descuido
o por falta de conocimiento de como programar pierdes la lista



AUTORES

Javier Arley Gonzalez Roblero, Saulo Ortiz Ortiz, Manuel Alejandro Mendez Lopez.

No hay comentarios:

Publicar un comentario