jueves, 12 de diciembre de 2013

CONCLUSIÓN.




Una estructura de datos es un arreglo de datos en la memoria de una computadora, y en algunas ocasiones en un disco. Las estructuras de datos incluyen arreglos, listas enlazadas, pilas, arboles binarios, y tablas de dispersi ón entre otros. 

Los algoritmos manipulan los datos en estas estructuras de varias formas, para buscar un dato particular u ordenar los datos.

Generalidades de las Estructuras de Datos:

Una forma de ver las estructuras de datos es enfoc andose en sus fortalezas y debilidades.

Para la mayor a de las estructuras de datos, se requiere que hagan las siguientes tareas:
1. Insertar un nuevo dato.
2. Buscar un elemento indicado.
3. Borrar un elemento indicado.

También en es saber como iterar a través es de todos los elementos en la estructura de datos, visitando cada uno en su turno ya sea para mostrarlo o para realizar alguna acci ón en este.

Otro algoritmo importante es el ordenamiento. Hay varias formas para ordenar los datos, desde ideas simples hasta otras que permiten realizarlo de manera r apida.

El concepto de recurrencia es importante en el diseño de ciertos algoritmos. La recurrencia involucra que un m etodo se llame a si mismo.

Elaborado por:
-Moreno Pérez Rebeca.
-Solís Jimenénez Martín A.
-GordilloArce Fareidy B.

El equipoalfabuanamaravillaondadinamitaescuadronlobo :)

colas

               
COLAS DE UN NODO

La particularidad de una estructura de datos de cola es el hecho de que sólo podemos acceder al primer y al último elemento de la estructura. Así mismo, los elementos sólo se pueden eliminar por el principio y sólo se pueden añadir por el final de la cola.

Ejemplos de colas en la vida real serían: personas comprando en un supermercado, esperando para entrar a ver un partido de béisbol, esperando en el cine para ver una película, una pequeña peluquería, etc. La idea esencial es que son todos líneas de espera.
En caso de estar vacía, borrar un elemento sería imposible hasta que no se añade un nuevo elemento. A la hora de añadir un elemento podríamos darle una mayor importancia a unos elementos que a otros (un cargo VIP) y para ello se crea un tipo de cola especial que es la cola de prioridad.


  PROGRAMA :
package nodo;

/**
 *
 * @author Invitado
 */
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;}
        }                     

PILAS DE UN NODO

PARA EL MANEJO DE DATOS SE CUENTA CON DOS OPERACIONES BÁSICAS: APILAR (push), QUE COLOCA UN OBJETO EN LA PILA, Y SU OPERACIÓN INVERSA, RETIRAR ( o des apilar, pop), QUE RETIRA EL ÚLTIMO ELEMENTO APILADO.



CLASE 1:
package nodo;

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;
      }
    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;
    }

}


CLASE 2:

package nodo; // debo de indicar en nombre de mi proyecto en todas las clases que utilizare
                        // para evitar errores en el nombre de mi clase.


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){
   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 l 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();
      }

}

LISTA DE UN NODO.

UNA LISTA ENLAZADA ES UNA ESTRUCTURA DE DATOS FUNDAMENTALES, Y PUEDE SER USADA PARA IMPLEMENTAR OTRAS ESTRUCTURAS DE DATOS. CONSISTE EN UNA SECUENCIA DE NODOS, EN LOS QUE SE GUARDARAN CAMPOS DE DATOS ARBITRARIOS Y UNA O DOS REFERENCIAS, ENLACES O PUNTEROS AL NODO ANTERIOR O POSTERIOR. EL PRINCIPAL BENEFICIO DE LAS LISTAS ENLAZADAS RESPECTO A LOS VECTORES CONVENCIONALES ES QUE EL ORDEN DE LOS ELEMENTOS ENLAZADOS PUEDE SER DIFERENTE AL ORDEN DE ALMACENAMIENTO EN LA MEMORIA O EL DISCO, PERMITIENDO QUE QUE EL ORDEN DE RECORRIDO DE LA LISTA SEA DIFERENTE AL DE ALMACENAMIENTO.  

CLASE 1:
package nodo;

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;
      }

    /**
     * @return the informacion
     */
    public String getInformacion() {
        return informacion;
    }

    /**
     * @param informacion the informacion to set
     */
    public void setInformacion(String informacion) {
        this.informacion = informacion;
    }

    /**
     * @return the enlace
     */
    public Nodo getEnlace() {
        return enlace;
    }

    /**
     * @param enlace the enlace to set
     */
    public void setEnlace(Nodo enlace) {
        this.enlace = enlace;
    }

}


CLASE 2:

package nodo;
import javax.swing.JOptionPane;
public class Lista {
   private Nodo inicio;

   Lista(){
       inicio=null;
   }
    /**
     * @return the inicio
     */
    public Nodo getInicio() {
        return inicio;
    }

    /**
     * @param inicio the inicio to set
     */
    public void setInicio(Nodo inicio) {
        this.inicio = inicio;
    }
   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 " ";
  }
}//ventaja es que podemos acer mejor uso de la memoria  y desventaja si pierdes lniclo por descuido
//o por falta de conocimieto de como programar pierdes la lista

PEAJE DE UN CAMION.

Problema:
Calcular el costo de peaje de camiones. Los camiones que llegan a una estación de peaje deben pagar $50.00 por cada eje, mas $100.00 por cada tonelada de peso total del camión.

CLASE 1:


package Peaje;
import javax.swing.JOptionPane;
public class PeajeDeCamiones {

    private int Ejes;

    private int Toneladas;

    private int PagoPorEje=50;

    private int PagoPorTonelada=100;

    private int PagoTotal;

    //encapsulamos nuestras variables

    public int getEjes() {

        return Ejes;

    }

    public void setEje(int Ejes) {

        this.Ejes = Ejes;

    }

    public int getToneladas() {

        return Toneladas;

    }

    public void setToneladas(int Toneladas) {

        this.Toneladas = Toneladas;

    }

    public int getPagoPorEje() {

        return PagoPorEje;

    }

    public void setPagoPorEje(int PagoPorEje) {

        this.PagoPorEje = PagoPorEje;

    }

    public int getPagoPorTonelada() {

        return PagoPorTonelada;

    }

    public void setPagoPorTonelada(int PagoPorTonelada) {

        this.PagoPorTonelada = PagoPorTonelada;

    }

    public int getPagoTotal() {

        return PagoTotal;

    }

    public void setPagoTotal(int PagoTotal) {

        this.PagoTotal = PagoTotal;

    }

    public void Captura(){

    Ejes=Integer.parseInt(JOptionPane.showInputDialog("¿CUANTOS EJES TIENE EL CAMION?:"));

    Toneladas=Integer.parseInt(JOptionPane.showInputDialog("¿CUANTAS TONELADAS PESA?:"));

    }

    public void Calculo(){

    PagoTotal=(Ejes*PagoPorEje)+(Toneladas*PagoPorTonelada);    

    }

    public void Imprime(){

       JOptionPane.showMessageDialog(null,"***PEAJE DE CAMIONES***\n\n   EJES DEL CAMION: "+Ejes

               +"\n   PESO POR TONELADAS: "+Toneladas+"\n   PAGO TOTAL: "+PagoTotal); // concatenamos los resultados

    }

}

 

CLASE 2:


import javax.swing.JOptionPane;

public class Usar {

    public static void main(String arg[]){

    PeajeDeCamiones P;

    P=new PeajeDeCamiones();

    

    P.Captura();

    P.Calculo();

    P.Imprime();

    }

}

ARBOL BINARIO DE BUSQUEDA.

UN ÁRBOL ES UNA ESTRUCTURA DE DATOS AMPLÍA MENTE USADA QUE IMITA LA FORMA DE UN ÁRBOL (UN  CONJUNTO DE NODOS CONECTADOS). UN NODO ES LA UNIDAD SOBRE LA QUE SE CONSTRUYE EL ÁRBOL Y PUEDE TENER CERO O MÁS NODOS HIJOS CONECTADOS A ÉL. SE DICE QUE UN NODO A ES PADRE DE UN NODO B SI EXISTE UN ENLACE DESDE A HASTA B (EN ESE CASO DECIMOS QUE B ES HIJO DE A). SOLÓ PUEDE HABER UN ÚNICO NODO SIN PADRES, QUE LLAMAREMOS RAÍZ. UN NODO QUE NO TIENE HIJOS SE CONOCE COMO HOJA. LOS DEMÁS NODOS (TIENEN PADRES Y UNO O VARIOS HIJOS) SE LES CONOCE COMO RAMAS.  
CLASE 1:

NODO DEL ÁRBOL.

public class NodoDelArbol
{
private int informacion;
private NodoDelArbol der;
private NodoDelArbol izq;
//constructores de la clase
    NodoDelArbol()
    {
    izq=null;
    der=null;
    }
    NodoDelArbol(int x)
    {
    informacion=x;
    izq=null;
    der=null;
    }
    public int getInformacion() {
        return informacion;
    }
    public void setInformacion(int informacion) {
        this.informacion = informacion;
    }
    public NodoDelArbol getDer() {
        return der;
    }
    public void setDer(NodoDelArbol der) {
        this.der = der;
    }
    public NodoDelArbol getIzq() {
        return izq;
    }
    public void setIzq(NodoDelArbol izq) {
        this.izq = izq;
    }
}



CLASE 2:

ARBOL.

public class Arbol
{
private NodoDelArbol raiz;

    public NodoDelArbol getRaiz() {
        return raiz;
    }
    public void setRaiz(NodoDelArbol raiz) {
        this.raiz = raiz;
    }
    //mètodo recursivo, r es la raìz, dato es el valor a insertar.
    public NodoDelArbol insertar(NodoDelArbol r, int dato)
     {
     if (r==null)
        {
      //creamos el nodo que vamos a insertar
         r=new NodoDelArbol(dato);
        }
     else
        {
        if (dato < r.getInformacion())
        {
        r.setIzq(insertar (r.getIzq(), dato));
        }
        else
        {
        r.setDer(insertar (r.getDer(), dato));
        }
        }
     return r;
     }
      public String inOrden (NodoDelArbol r)
     {
        String cadena =new String();
        if (r !=null)
        {
        cadena=cadena + inOrden (r.getIzq());
        cadena=cadena + String.valueOf(r.getInformacion()+ "  ");
        cadena=cadena + inOrden (r.getDer());
        }
        return cadena;
     }
      public String preOrden(NodoDelArbol r)
      {
      String cadena=new String ();
      if (r !=null)
        {
      cadena=cadena + String.valueOf(r.getInformacion()+ "  ");
      cadena=cadena + preOrden (r.getIzq());
      cadena=cadena + preOrden (r.getDer());
        }
      return cadena;
      }
      public String postOrden (NodoDelArbol r)
      {
          String cadena =new String();
          if (r !=null)
          {
          cadena =cadena + postOrden (r.getIzq());
          cadena =cadena + postOrden (r.getDer());
          cadena =cadena + String.valueOf(r.getInformacion()+ "  ");
          }
       return cadena;
      }

}

SALARIO DIARIO DE UN EMPLEADO.



PROBLEMA:

Calcular el salario diario de un empleado con base a lo siguiente:
1.    Por cada hora trabajada recibe $17.50 para las primeras 8 hrs.


2.    Por cada hora extra trabajada recibe 1.5 veces el costo de la hora de trabajo dentro del horario normal.

Clase 1:
·         Programa
package Salario_Diario;
import javax.swing.JOptionPane;
public class Calcular_Salario {
    private String nombre; // agregamos el nombre de el empleado por simple estética
    private int HorasTrabajadas;
    private float SubSalario;
    private float SalarioTotal;
    private float PagoPorHora=17.50f;
    
    public String getNombre() {
        return nombre;
    }
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    public int getHorasTrabajadas() {
        return HorasTrabajadas;
    }
    public void setHorasTrabajadas(int HorasTrabajadas) {
        this.HorasTrabajadas = HorasTrabajadas;
    }
    public float getSubSalario() {
        return SubSalario;
    }
    public void setSubSalario(float SubSalario) {
        this.SubSalario = SubSalario;
    }
    public float getSalarioTotal() {
        return SalarioTotal;
    }
    public void setSalarioTotal(float SalarioTotal) {
        this.SalarioTotal = SalarioTotal;
    }
    public float getPagoPorHora() {
        return PagoPorHora;
    }
    public void setPagoPorHora(float PagoPorHora) {
        this.PagoPorHora = PagoPorHora;
    }
    public void Captura(){
    nombre=JOptionPane.showInputDialog("NOMBRE:");
    HorasTrabajadas=Integer.parseInt(JOptionPane.showInputDialog("¿CUANTAS HORAS TRABAJÓ?"));//pedimos las horas trabajadas
    }
    public void CalcularSalario(){
        if (HorasTrabajadas>8){ //si la el empleado trabajó mas de ocho horas se realaizará el siguiente procedimiento
                SubSalario=(HorasTrabajadas-8)*(PagoPorHora*1.5f); //cuando se escribe un número con decimal se le agrega una f
                                                                   //de lo contrario nos marcará error
                SalarioTotal=(8*PagoPorHora)+SubSalario;
        }
        else{ // si la primera condición no se cumple entonces se realizará el siguiente procedimiento
                SalarioTotal=HorasTrabajadas*PagoPorHora; 
        }
    }
    public void ImprimirSalario(){
    JOptionPane.showMessageDialog(null,"***SALARIO DIARIO***\n\n"
                                  +"NOMBRES: "+nombre+"\n HORAS TRABAJADAS: "+HorasTrabajadas
                                  +"\nSALARIO DIARIO TOTAL: "+SalarioTotal);// imprimimos los resultados con una cadena
    }
}


Clase 2:
·         Programa
package Salario_Diario;
import javax.swing.JOptionPane;
public class Usar {
    public static void main (String arg[]){
        Calcular_Salario d;
        d=new Calcular_Salario();
        
        d.Captura(); //mandamos a llamar a los métodos
        d.CalcularSalario();
        d.ImprimirSalario();
    }
}