viernes, 13 de diciembre de 2013

Estructura De Datos Lineales


Ø Estructura de Datos Lineales

Las estructuras de datos lineales se caracterizan porque sus elementos están en secuencia, relacionados en forma lineal, uno luego del otro. Cada elemento de la estructura puede estar conformado por uno o varios subelementos o campos que pueden pertenecer a cualquier tipo de dato, pero que normalmente son tipos básicos.
Una estructura lineal de datos os lista esta conformada por ninguno, uno o varios elementos que tienen una relación dónde existe un primer elemento, seguido de un segundo elemento y así sucesivamente hasta llegar al último.

El valor contenido en los elementos pueden ser el mismo o diferente. En estas estructuras se realizan operaciones de agregar y/o eliminar elementos a la lista según un criterio particular.

Tipos de Datos Abstractos (TDA):

·      
Listas
·       Pilas
·       Colas


Publicado por: Dickner Steven Barrios & Yenifer Mina Castillo

Practica 6.- Nodo


= NODO =
Los nodos son elementos de tipo abstracto de dato que guarda un objeto con sus atributos de manera individual, pero dentro de un grupo de objetos, contiene un enlace o puntero quien indica cual será el nodo que le proceda, es un elemento básico en las listas, pilas, colas y árboles. 

Como se puede ver en esta imagen un diagrama sobre un nodo y es así como un nodo se realiza ya que donde dice DATO ahí se coloca la información que se dara a conocer y donde dice NULL  a esto se le conoce como campo ya que ahí se pone la referencia si no llegase a tener la referencia y tiene NULL esto significa que el nodo esta vacío y es el último nodo.

y aquí en la siguiente imagen si observa en el campo osea otro nodo puede apuntar a un objeto del tipo nodo y de este modo cada nodo pueda utilizarse como un ladrillo para construir listas de datos y cada uno de estos mantendrá ciertas relaciones con otros nodos.

Nota: Dos de las características de un Nodo son:

  1. Es que si un nodo tiene en su campo Enlace o ya sea Null es por que es el ultimo.
  2. Ya sea que un nodo tiene una referencia como se mira en el ejemplo es por que hay un nodo siguiente.
Aquí un ejemplo de como se relaciona un nodo con otros nodos y así se construye una lista de datos.


En este caso utilizamos la referencia del ultimo nodo como se mira la ultima referencia fue la de 1010 y de ahí el siguiente nodo se registro el dato de Lupita en la referencia 1111, y en el siguiente nos ubicamos cual fue el ultimo dato capturado ya que en la parte superior derecha se coloca la referencia del anterior nodo e introducimos el otro dato y al igual la referencia y así mismo seguimos hasta introducir el ultimo dato y referencia ¿como saber que es el ultimo nodo? ya que en la referencia dira null y eso significa que esta vació y es el ultimo.

NOTA: Este programa es la base con la que podremos hacer lo siguientes programas de las Estructuras de datos Lineales y No Lineales.


  • Diagrama UML


  • Aquí se comienza el código para llevar a cabo el programa y así corra.
Donde lo primero que debemos hacer como ya hemos visto en programas anteriores es crear el paquete y continuamente la clase como se vera en seguida.


package Dicknersito; // nombre del paquete



import javax.swing.JOptionPane;

public class Nodo // nombre de la clase

{
private String informacion;
private Nodo enlace;

// y aquí lo que debemos hacer es encapsular las variables para que nuestro programa este protegido.
    
    public String getInformacion() 
{
        return informacion;
    }
   
    public void setInformacion(String informacion) 
{
        this.informacion = informacion;
    }
   
    public Nodo getEnlace() 
{
        return enlace;
    }

    public void setEnlace(Nodo enlace) 
{
        this.enlace = enlace;
    }
    
    public Nodo (String x)
    {
        informacion= x;
        enlace=null;
    }
    public Nodo(String x, Nodo n)
    {
        informacion=x;
        enlace=n;
    }     
}

como sabemos las dos diagonales significa que es para dar un comentario ----> "//"

Conclusión:

Como conclusión se llego a  que  un Nodo nos puede servir para guardar datos ya sea uno o mas de uno y con una respectiva referencia.

Publicado por: Dickner Steven Barrios & Yenifer Mina Castillo










Listas


= LISTAS=

Una lista es una estructura de datos homogénea y dinámica, que va a estar formada por una secuencia de elementos, donde cada uno de ellos va seguido de otro o de ninguno.
Homogénea: Todos los elementos que la forman o tienen el mismo tipo base.
Dinámica: Puede crecer o decrecer en tiempo de ejecución según nuestras necesidades. Dos listas pueden ser diferentes si:
No tienen el mismo número de elementos.

Operaciones basicas de Listas:

  • Añadir o insertar elementos
  • Buscar o localizar elementos
  • Borrar Elementos
  • Moverse a través de una lista  anterior, siguiente, primero.
Enseguida les mostrare el código de una como hacer un programa sobre listas.

* Programa para llevar acabo una Lista *


=Diagrama UML=



Como se darán cuenta seguiremos utilizando la clase Nodo y crearemos una clase llamada Lista con sus atributos y procesos a realizar.



package Dicknersito; // nombre de nuestro paquete

import javax.swing.JOptionPane;

public class Lista // nombre de nuestra clase
{
   private Nodo inicio;

   Lista()
{
       inicio=null;
   }

    public Nodo getInicio() 
{
        return inicio;
    }

    public void setInicio(Nodo inicio) 
{
        this.inicio = inicio;
    }
   public Lista InsertarInicio(String informacion)
{
   Nodo nuevo;
   nuevo= new Nodo(informacion); // quiere decir crear nuevo nodo o elemento

   nuevo.setEnlace(getInicio()); //aquí quiere decir enlazar 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 dirección del nodo siguiente
     }
     ultimo.setEnlace(new Nodo (informacion)); //se crea el nuevo nodo después del ultimo
     return this;
   }

public Lista InsertarAntes(String nombre, String ref) //aquí se utilizan parámetros
{
       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); //constructor
               inicio=nuevo;
           }

           else
{
               nuevo=new Nodo(nombre, actual); //constructor
               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  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 " ";
  }
}


NOTA:

Como se han de dar cuenta aparecen mucho la palabra Get y Set en breve les daré una pequeña explicación del por que aparecen mucho.

Get es un método que tiene un tipo de retorno que se relaciona con el tipo de variable miembro asociada. Los métodos get generalmente no toma ningún parámetro.

Set igual es un Método que tiene un tipo de retorno "void" y toma un parámetro del tipo adecuado para asignar a la variable miembro asociada.

Otra nota es que tambien aparece equals  se han de preguntar para que sirve o que es lo que hace, bueno equals al igual que Get y Set es un Método el cual sirve para comparar ya sea 2 cadenas o 2 String.

Existen dos tipos de borrados: lógico y físico.

Publicado por: Dickner Steven Barrios & Yenifer Mina Castillo










Pilas


= Pilas =

Una pila se define como una estructura de datos en la que solo se puede operar por uno de sus extremos. Se considera una estructura de tipo UEPS o LIFO que en ingles es " Last in, First out" que significa: Ultimas entradas, Primeras salidas. Las Pilas pueden presentarse de manera ya sea ligada o contigua.

Las características de las Pilas son:
  • Es una estructura lineal
  • Es dinámica
  • Se insertan y eliminan por el mismo extremo (UEPS o LIFO)
  • Esta formado por nodos
  • Sus principales operaciones son 2:
         *Push (que significa Insertar)
         * Pop (que significa Eliminar)

Aquí una representación Gráfica de una Pila:




  • Donde Push me permite Insertar un elemento a la Pila
  • Pop me permite Eliminar un elemento de la Pila
Ø Diagrama UML



Ø  Programación en Java:

1.-  Aquí comienza la clase de Pilas


   package Dicknersito;

   public class Pilas 

{



   private Nodo tope;



   Pilas()
   {
       tope=null;
   }
      public Nodo gettope() 
     {
        return tope;
    }
   
    public void settope(Nodo tope) 
    {
        this.tope = tope;
    }
    
    public Pilas push(String informacion) // aquí comienza la clase de push osea Insertar
    {
    Nodo nuevo = null;

    nuevo= new Nodo(informacion);//crear nuevo nodo(elemento)

    nuevo.setEnlace(tope);//enlaza nuevo al frente de la lista

    tope=nuevo;//mueve inicio y apunta al nuevo nodo

    return this;//devuelve la referencia del objeto lista
    }
    public String pop() //quitar de la lista el ultimo nodo
    {
      Nodo ultimo = null,anterior=null;

      ultimo=tope;

      while(ultimo.getEnlace()!=null)
      {
          anterior=ultimo;
   
          ultimo=ultimo.getEnlace();
          }
      if(tope.getEnlace()==null)
      {
          tope=null;
      }
      else
      {
      anterior.setEnlace(null);//borrado logico
      }
      return ultimo.getInformacion();
      }
}

}


Nota:

estos signos  --> != significan: Diferente de.

estos signos  --> =significan: Igual igual.

Conclusión:

Sabiendo que Pilas es un Tipo de Dato Abstracto que esta dedicado al almacenamiento de elementos sin importar el tipo de dato que son, su función sera la misma ya que cumple con la regla UEPS que es la que hace que se identifique ante las demás dado las pilas solo poseen un punto único de entrada y salida de elementos y solo se vera el ultimo elemento insertado.

Publicado por: Dickner Steven Barrios & Yenifer Mina Castillo

Colas


Colas

Una cola es también una estructura de datos lineal donde la eliminación se realiza por uno de sus extremos llamado FRENTE y el insertado de elementos se hace por el otro extremo que es llamado FINAL. 
A esta estructura se les conoce por su peculiar característica que es llamada PEPS "Primeras Entradas Primeras Salidas" o FIFO que en ingles es "First in First out".

Las características de las Pilas son:
  • Es una estructura lineal
  • Es dinámica
  • Los elementos se llaman nodos.
  • Los elementos se insertan por un extremo "Final" y se eliminan por el otro extremo "Frente"
  • Se conoce como PEPS o FIFO

ØRepresentación Grafica de una cola:




Aqui se puede observar cuando se inserta por el Extremo "Final" y se elimina por el Extremo "Frente"

Ø  Diagrama UML:



Ø  Programación en Java:

1.-  Aquí comienza la clase de colas

   package Dicknersito;



    public class Colas

   {

    Nodo frente,fin;

    Colas()
{
        frente=null;
        fin=null;
    }

    public Colas inserta (String x)
    {
        Nodo nuevo=new Nodo (x);

        if ((frente==null) &&  (fin == null))
    {
            fin=nuevo;
        frente=fin;
   }
        else 
   {
            fin.setEnlace(nuevo);
            fin=nuevo;
   }
        return this;
    } 
           }
     }
    
      NOTA:
           Para saber si una cola esa vacia FINAL debe estar NULL al igual que FRENTE como por ejemplo en programación debe ser asi: ----> Final == Null
            ----> Frente== Null

     Conclusión:
     
    Una cola es un TDA de almacenamiento de elementos ya que  su funcionalidad es la misma y cumple con la regla de PEPS, como se puede observar el orden de salida de los elementos es el mismo que el de entrada. Esto sucede por que las colas están diseñadas para devolver los elementos ordenados tal como se van introduciendo.
       
     
Publicado por: Dickner Steven Barrios & Yenifer Mina Castillo