domingo, 24 de julio de 2011

ESTRUCTURAS DINAMICAS

PILAS: una pila permite almacenar y recuperar datos mediante operaciones tales como:
Push: apilar
Pop: des-apilar
Estas operaciones se realizan sobre un único extremo llamado cima.
Se agrega un dato retirado  siempre el último que se colocó en la pila.

 
















Esta pila tiene 4 elementos, para la implementación de la clase haremos uso una variable entera tope que se encargara de decirnos en que posición del Array esta el elemento de la cima, en este caso tope=3 porque en el Array donde ingresamos los datos desde la posición 0.


                                  


Para eliminar un elemento, se extrae o desapila un elemento por la cima.
                                  



IMPLEMENTACIÓN DE PILAS
Teniendo en cuenta que las inserciones y eliminaciones en una pila se hacen siempre por un extremo, lo que se considera primer elemento de la lista, en una realidad el último electo de la pila.


public class Pila{
    int tope=-1;
    int vec[];
    Pila(int max){
      vec=new int [max];
      }
   
    public boolean llena(){
              if (tope==vec.length-1)
              return true;
         
    else
        return false;
    }
   
    public boolean vacia(){
              if (tope==-1)
       return true;
      
          else
               return false;
   
    }
    public void push(int dato){
           if (llena()== true)
                    System.out.println("Overflow");
           else
               if (tope==-1){
                    tope=0;
                        vec[tope]=dato;
                }
                else{
                        tope++;
                        vec[tope]=dato;
                }               
    }     
    public int pop(){
            int aux;
            if (vacia()==true){ 
                    System.out.println("La pila esta vacia");
                  return -1;
          }
            else{
                    aux=vec[tope];
                    tope--;
           }
                return aux;
          } 
        public void Imprime_Datos(){ if(vacia()==true){
          System.out.println("La pila esta vacia, ingrese datos primero:");
                }
                else                       
                for(int Contador=0;Contador<vec.length;Contador++)
             System.out.println("Los valores de la pila son:"+vec[Contador]);
        }

COLAS




Es una estructura de datos por ser una secuencia de elementos en la que la operación de inserción "Push" se realiza por un extremo y la operación de extracción "Pop" por el otro extremo a este. Tipo de estructura también se le conoce como FIFO debido que el primer elemento en entrar será también el primero en salir.
El tipo de estructura llamado cola representa la idea que tiene de fila en la vida real; como por ejemplo la cola para subir en el camión está compuesta por elementos "Personas que disponen de 2 extremos que son: comienzo y fin. por el comienzo se extraerá un elemento cuando haya comprad0 el boleto a su viaje y si llega una nueva persona con intensión de usar el autobús tendrá que colocarse al final y esperar a que todos los elementos situados antes que el suban al autobús.
IMPLEMENTACION:

    Crear: se crea la cola vacía.
    Encolar (añadir, entrar, push): se añade un elemento a la cola. Se añade al final de esta.
    Desencolar (sacar, salir, pop): se elimina el elemento frontal de la cola, es decir, el primer elemento que entró.
    Frente (consultar, front): se devuelve el elemento frontal de la cola, es decir, el primero elemento que entró.
IMPLEMENTACION  DE COLAS
public void inserta(Elemento x) {
        Nodo Nuevo;
        Nuevo = new Nodo(x, null);
        if (NodoCabeza == null) {
            NodoCabeza = Nuevo;
        } else {
            NodoFinal.Siguiente = Nuevo;
        }
        NodoFinal = Nuevo;
    }

    public Elemento cabeza() throws IllegalArgumentException {
        if (NodoCabeza == null) {
            throw new IllegalArgumentException();
        } else {
            return NodoCabeza.Info;
        }
    }
    public Cola() {
    // Devuelve una Cola vacía
        NodoCabeza = null;
        NodoFinal = null;
    }


TIPOS DE COLAS

Simples
Dobles
Circulares
DIFERENCIA ENTRE PILAS Y COLAS

PILAS. Ultimo elemento que se insertó en la lista.
COLAS. Primer elemento que se insertó en la lista.
COLAS SIMPLES: tienen un problema ya que las eliminaciones solo pueden realizarse por un extremo, puede llegar un momento el posicionado F sea igual al máximo numero de elementos en la cola siendo que al frente de la misma existan lugares vacíos y al insertar un nuevo elemento nos mandara un error de cola llena. Para solucionar el problema de desperdicio de memoria se implementaron las colas circulares, en las cuales existe un posicionado de último elemento al primero de la cola.
DIFERENCIA ENTRE LISTAS Y PILAS
Ciclo
Control de posiciones.


EJEMPLO:    NODOS LISTAS ENLASADAS  PILAS COLAS



            
   Clases
1.    Una clase vehículo
2.    Una clase nodo
3.    Una clase lista
4.    Una clase cola

Este programa  es para  que todos aquellos   que tengan un móvil  en calidad de ilegal  accedan a registrarse y posterior  a  imprimir los  datos de sus  registros   guardados.
El objetivo es para darle facilidad a cada  usuario  que acceda mediante este programa.
Realización o Procedimiento  para construir el programa:
Para el formulario:
1.     Siete  j label1  y coloco los  siguientes datos en cada uno; propietario, tipo de movilidad, N° de chasis, N° de motor,  año o modelo del móvil,  color y costo de impuesto.
2.     jTextField1  le cambio la variable de cada uno  por txtpropietario, txttipo, etc.
3.      jButton1 cambio las variables por btnregistrar   clik derecho y busco eventos (ActionPerformed[……..]) y luego realizo el siguiente código para  ingresar y mostrar datos
Variables declaradas  como globales.
(En el siguiente….)
public class PROYECTOVEHICULOView extends FrameView {
     Lista lista = new Lista();
    Cola cola = new Cola();
    Vehiculo vehiculo;
    Vehiculo vehiculo2;
    Vehiculo vehiculo3;
    int pos=0;
    int fila=0;
    int x=0;
El código como en el campo  local  dentro el botón  registrar:
(En el siguiente………).
private void btnregistrarActionPerformed(java.awt.event.ActionEvent evt) {                                            
   try{    String pro = txtpropietario.getText();
       String tip = (String)item.getSelectedItem();//revisar mucho ojo
       String chas = txtchasis.getText();
       String mot = txtmotor.getText();
       int mod = Integer.parseInt(txtmodelo.getText());
       String col = txtcolor.getText();
       double cosv = Double.parseDouble(txtcosto.getText());
       double cos = Double.parseDouble(txtcosto.getText());
    JOptionPane.showMessageDialog(null,"\nPROPIETARIO : "+ txtpropietario.getText()
             //  +"\nTIPO DE MOVIL : "+txttipo.getText()
               +"\nN° CHASIS : "+txtchasis.getText()
               +"\nN° MOTOR : "+txtmotor.getText()
               +"\nMODELO : "+txtmodelo.getText()
               +"\nCOLOR : "+txtcolor.getText()
               +"\nCOSTO : "+txtcosto.getText()
               +"\n\n ¡¡¡ ESTOS SON LOS DATOS  A GUARDARSE   !!!");
   lista.IncertFrente(new Vehiculo( pro, tip, chas, mot, mod, col, cosv, cos));
    vehiculo = (Vehiculo)lista.DelFrente();
              tabla1.setValueAt(pro,fila,0);
             tabla1.setValueAt(tip,fila,1);
              tabla1.setValueAt(chas,fila,2);
              tabla1.setValueAt(mot,fila,3);
              tabla1.setValueAt(mod,fila,4);
              tabla1.setValueAt(col,fila,5);
              tabla1.setValueAt(vehiculo.getCostoV(),fila,6);
              fila++;
 if(pro.equals("") ||tip.equals("") ||chas.equals("")  ||mot.equals("")   ||mod == 0                                                                                                                                                 ||col.equals("")  ||cosv == 0.0){

              tabla3.setValueAt(pro,x,0);
              tabla3.setValueAt(tip,x,1);
              tabla3.setValueAt(chas,x,2);
              tabla3.setValueAt(mot,x,3);
              tabla3.setValueAt(mod,x,4);
              tabla3.setValueAt(col,x,5);
              tabla3.setValueAt(vehiculo.getCostoV(),x,6);
              tabla3.setValueAt(("REGISTRO  INCOMPLETO !!!"),x,7);
              x++;


        }

  cola.IncertarFrente(new  Vehiculo(pro, tip, chas, mot, mod, col, cosv, cos));

       vehiculo2 = (Vehiculo)cola.DelFrente();

       if(!pro.equals("")
               &&!tip.equals("")
               &&!chas.equals("")
               &&!mot.equals("")
               &&mod != 0
               &&!col.equals("")
               &&cosv != 0.0){
       tabla2.setValueAt(pro,pos,0);
       tabla2.setValueAt(tip,pos,1);
       tabla2.setValueAt(chas,pos,2);
       tabla2.setValueAt(mot,pos,3);
       tabla2.setValueAt(mod,pos,4);
       tabla2.setValueAt(col,pos,5);
       tabla2.setValueAt(vehiculo.getCostoV(),pos,6);
       tabla2.setValueAt(vehiculo2.getCosto(),pos,7);
       pos++;
        }
 String Limpiar="";
          txtpropietario.setText(Limpiar);
          // item.setText(Limpiar);
           txtchasis.setText(Limpiar);
           txtmotor.setText(Limpiar);
           txtmodelo.setText(Limpiar);
           txtcolor.setText(Limpiar);
           txtcosto.setText(Limpiar);
           Vehiculo v=new Vehiculo();
     } catch (Exeption ex);
 JOptionPane.ShowMesageDialog(null,”modelo y costo solo aceptan caracteres de tipo entero y no de cadena”);
}
   Y  de igual manera para  el botón salir (System.exit(0)).
4.      jTable1  clik derecho busco  contenido de la tabla, columnas  e introduzco en cada  celda,  los  siete datos  donde mostrará  en cada celda  los datos ingresados, realizo para cada tabla  lo mismo.
5.    Un  j label1 para el logo tipo del programa.
       


Clases del programa

1.     clase vehículo
import javax.swing.JOptionPane;
public class Vehiculo {
    private  String propietario;
    private  String tipo;
    private  String chasis;
    private  String motor;
    private  int modelo;
    private  String color;
    private  double costo;
    private  double costovehiculo;
 public Vehiculo(){
       propietario=tipo=chasis=motor=color="";
       modelo=0;
       costo=0.0;
       costovehiculo=0.0;
 }
public Vehiculo(String pro,String ti, String chas,String mot,int mod,  String col,double                                                                                                      cos,double cosv){
         propietario=pro;tipo=ti;chasis=chas;motor=mot;color=col;
         modelo=mod;
         costo=cos;
         costovehiculo = cosv;
  }
public void mensaje(){
      JOptionPane.showMessageDialog(null,"SEÑOR USUARIO DEBE REGISTRARSE      CUIDADOSAMENTE ");
 }
public String getVehiculo(){
       return  propietario+tipo+chasis+motor+color+ modelo+costo;
 }
public void setPropietario(String pro){
     propietario=pro;
 }
public void setTipo(String ti){
     tipo=ti;
 }
public void setChasis(String chas){
     chasis=chas;
 }
public void setMotor(String mot){
     motor=mot;
 }
public void setModelo(int mod){
     modelo=mod;
 }
public void setColor(String col){
     color=col;
 }
public void setCosto(double cos){
     costo = cos;
 }
public void setCostoV(double cosv){
     costovehiculo = cosv;
 }
public double getCosto(){
     int model;
     int añoactual=2011;
         model=añoactual-modelo;
      if(model >= 1 && model <= 5){
          costo += costo * 0.30;
      }
      if(model >= 6 && model <= 10){
          costo += costo * 0.35;
         }
      if(model > 10){
          costo += costo * 0.5;
     }
     return costo;
 }
public double getCostoV(){
       return costovehiculo;
 }
public String getPropietario(){
     return propietario;
    }
public String getTipo(){
     return tipo;
  }
public String getChasis(){
     return chasis;
       }
public String getMotor(){
     return motor;
      }
public int getModelo(){
     return modelo;
     }
public String getColor(){
     return color;
    }
 }
2.    Clase nodo

public class Nodo extends Vehiculo {
    public Object datos;
    public Nodo sgte;
    public Nodo anterior;
public Nodo(){
    datos = sgte=anterior=null;
}
public Nodo(Object obj){
    datos=obj;sgte=anterior=null;
 }
public Nodo(Object obj, Nodo sig){
    datos=obj;sgte=sig;
}
public void Setdatos(Object dat){datos= dat;}
public void Setanterior(Nodo ant){anterior=ant;}
public void Sgte(Nodo sg){sgte=sg;}

public Nodo GetSgte(){return sgte;}
public Nodo Getanterior(){return anterior;}
public Object Getdatos(){return datos;}
}
3.     clase lista
public class Lista {
   private Nodo prim;
   private Nodo ult;
   private String nombre;
   private Nodo Actual;
   private String[] Lista;
public Lista(){
   prim=ult=null;
   nombre="";
}
 public Lista(String n){
   prim=ult=null;
   nombre=n;
    }
public  boolean ListaVacia(){return prim==null;}
public String getNombre(){return nombre;}
public Nodo getPrimero(){return prim;}
public Nodo getUltimo(){return ult;}

public void Imprimir (int max) {
              for (int n = 0 ; n <=  max ; n++ ) {
             System.out.println(n + ".-  " + Lista[n]);
   }
}
public  void IncertFrente(Object obj){
    if (ListaVacia())
       // System.out.println("la lista esta vacia");
          prim=ult=new Nodo(obj);
    else
 prim=new Nodo(obj,prim);
}
public  void IncertAtras(Object obj){
    if (ListaVacia())
       // System.out.println("la lista esta vacia");
          prim=ult=new Nodo(obj);
    else
   ult=ult.sgte=new Nodo(obj);
}
public  Object   DelFrente(){
       Object  datoAremover=null;
     if (ListaVacia())
        System.out.println("la lista esta vacia");
        datoAremover =  prim.datos;
        if(prim.equals(ult))
            prim=ult=null;
        else
            prim=prim.sgte;
      return     datoAremover;
     }
public  Object   DelAtraz(){
       Object  datoAremover=null;
       if (ListaVacia()){
        System.out.println("la lista esta vacia");}
        datoAremover = ult.datos;
        if(prim.equals(ult)){
            prim=ult=null;
        } else{
          Nodo Actual=prim;
          while (Actual.sgte !=ult)
              Actual=Actual.sgte;
          ult=Actual;
          Actual.sgte=null;
        }
      return  datoAremover;
   }
public Object getElementoN(int posicion){
    if(ListaVacia()){
        return null;
    }
 else{
         Nodo actual=prim;
         int cont=1;
          while ((actual !=null)&&(cont<posicion)){
              actual=actual.sgte;
          cont++;
        }
        if ((actual !=null)&&(cont==posicion)){
              return actual.datos;}
 else{
      return  null;
   }
 }
 }
public void IncertartElementoN(int posicion,Object obj){
    Nodo nuevo;
    Nodo actual;
    if(ListaVacia()){
        return;
    }
 else{
         actual=prim;
         int cont=1;
          while ((actual !=null)&&(cont<posicion-1)){
              actual=actual.sgte;
          cont++;
        }
        if ((actual !=null)&&(cont==posicion-1)){
              nuevo=new Nodo(obj,actual.sgte);
        actual.sgte=nuevo;
    }
  }
}
public  Object   DeletElementoN(int posicion){
       Object  datoAremover;
       Nodo actual;
       if (ListaVacia()==true){
           return null;
    }
 else{

        if(posicion==1){
           datoAremover=prim.sgte;
           return datoAremover;
        } else{
           actual=prim;
           int cont = 1;
          while ((Actual.sgte !=null)&&(cont<posicion-1)){
              actual=actual.sgte;
              cont++;
          }
           if((Actual.sgte !=null)&&(cont==posicion-1)){
              datoAremover=actual.sgte.datos;
              actual.sgte=actual.sgte.sgte;
      return  datoAremover;
       }
     }
     return null;

   }
  }
}

4.    Clase cola
public class Cola {
    private Lista listaCola;
    public Cola(){
     listaCola = new Lista("cola");
      }
public void IncertarFrente(Object objeto){
       listaCola.IncertFrente(objeto);
     }
public Object DelFrente(){
      return listaCola.DelFrente();
    }
public boolean estaVacia(){
     return listaCola.ListaVacia();
    }
}




LISTAS ENLAZADAS DOBLES

Listas doblemente enlazadas.
 

Las listas doblemente enlazadas consisten en datos y enlaces tanto al elemento siguiente como al elemento anterior. Con lo que se consiguen dos grandes ventajas, primero la lista se puede leer en cualquier dirección, la segunda es que se pueden leer los enlaces hacia delante como hacia atrás, con lo que si un enlace resulta no valido se puede reconstruir utilizando el otro enlace.

Como en las listas simplemente enlazadas, las doblemente enlazadas pueden contener una función que almacene cada elemento en una posición específica de la lista a medida que esta se construye, en lugar de colocar cada elemento al final de la lista.


Una lista doblemente enlazada es una lista lineal en la que cada nodo tiene 2 enlaces un nodo llamado siguiente y otro nodo llamado anterior.-
LAS OPERACIONES SOBRE ESTE TIPO DE LISTAS SON LAS SIGUIENTES
Añadir un elemento a una lista doblemente enlazada vacía.
Insertar un elemento en la primera posición de la lista.
Insertar un elemento en la última posición en la lista.
Insertar un elemento a continuación d4e un nodo cualquiera de una lista.
Buscar o localizar elementos.
Borrado de elementos.
a) Eliminar único elemento de una lista doblemente enlazada.
b) Eliminar el primer elemento de la lista doblemente enlazada.
c) Eliminar el último elemento de una liara doblemente enlazada.
d) Eliminar un elemento intermedio de una lista doblemente enlazada.
BUSCAR O LOCALIZAR ELEMENTOS
Para recorrer una lista se procederá de un modo parecido al que se usa con las listas lineales, pero se tiene que tener encuentra que la lista no siempre tiene que estar en uno de sus extremos.-
LOS PASOS DE LA BUSQUEDA SON LOS SIGUIENTES
Retroceder hasta el comienzo de la lista, asignar el valor de la lista---anterior mientras lista  anterior no sea NULL. WHILE (anterior! = NULL o -999).-
Se abre un ciclo en donde al menos la condición debe de ser que el índice no sea NULL.(ciclos pasos repetitivos).
Dentro del bucle (ciclo) asignaremos a la lista el valor del nodo siguiente al actual.
LISTAS LIGADAS CIRCULARES
Es una lista lineal en la que el último nodo apunta al primero.
Las listas circulares editan excepciones en las operaciones que se realicen sobre ellas, en  algunas listas circulares se añade un nodo especial de tipo cabecera, de ese modo se evita que la lista este vacía., esto significa que una lista enlazada circular es muy similar a una lista ligada simple en lo que varía es que el ultimo elemento apunta a su siguiente como el primero.-

ESTRUCTURAS NO LINEALES
INTRODUCCION DE ARBOLES

Hasta el momento solo hemos visto estructuras lineales estáticas y dinámicas de datos, es decir a un elemento, al analizar la estructura árbol se introduce el concepto de estructura de ramificación entre nodos.-


                           






Un árbol consiste en un conjunto de nodos y un conjunto de aristas, de forma que:
    Se distingue un nodo llamado raíz
    A cada nodo h, excepto la raíz, le llega una arista de otro nodo p (p padre de h, h uno de los hijos de p)
    Para cada nodo hay un camino (secuencia de aristas) único desde la raíz.

Las listas ligadas ofrecen grandes ventajas de flexibilidad sobre la representación contigua de las estructuras de datos, pero adolecen de una característica débil que son las listas secuenciales, ósea están arregladas de modo que se necesitan mover por ellas solo una posición a la vez. Las aplicaciones se basan en problemas de recuperación de información


 DEFINICION DE ARBOLES BINARIOS
Un árbol binario en donde cada nodo puede tener como máximo 2 sub árboles y siempre es necesario distinguir entre el sub árbol izquierdo y el sub árbol derecho formalmente un árbol binario T se define como un conjunto de finitos de elementos llamados nodos, de forma que:
a) T es vacío (en cuyo caso se llama árbol nulo o árbol vacío).
b) T tiene un nodo distinguido llamado R, que en este caso es la raíz de T, y los restantes nodos de T forman un par ordenado de árboles binarios disjuntos llamados T1 Y T2.-
Cada nodo puede tener como máximo solo 2 hijos.
REPRESENTACION DE ARBOL
En particular, el siguiente diagrama representa un árbol binario T de la forma que sigue:
a) T 11 nodos representados por la letra de la  A  a la L excluyendo la letra i.
b) La raíz del árbol T es el nodo A, se encuentra en la parte superior del programa.-
c) Una línea hacia abajo ya sea izquierda o derecha señala un sucesor izquierdo o derecho.-
TERMINOLOGIA DE ARBOLES BINARIOS

PADRE: suponga que n que es un nodo de T como un sucesor izquierdo si un sucesor derecho S2 entonces n se llama padre de S1 Y S2 cada nodo n de un árbol binario T excepto la raíz, tiene un único padre llamado  n.
HIJO: analógicamente si n es el padre de S1 Y S2, entonces S1 es el hijo izquierdo y S2 es el hijo derecho.-

HERMANOS: S1 Y S2 se dicen que son hermanos ya que son hijos del mismo padre.-
DESCENDIENTE Y ANTECESOR: si un nodo L se dice descendiente de un nodo n y n se dice antecesor de L si existe una sucesión de hijos desde n hasta L, en particular L puede ser descendiente izquierda de n dependiendo si pertenece al subárbol izquierdo o derecho de n

RECORRIDO DE UN ARBOL BINARIO
 
Se denomina recorrido de un árbol el proceso que permite acceder una sola vez a cada uno de los nodos del árbol. Cuando un árbol se recorre, el conjunto completo de nodos se examina.
Existen muchos modos para recorrer un árbol binario. Por ejemplo existen seis diferentes recorridos generales en un árbol binario simétricos dos a dos.
Los algoritmos de recorrido de un árbol binario representan tres tipos de actividades comunes:
•    Visitar el nodo raíz
•    Recorrer el subárbol izquierdo
•    Recorrer el subárbol derecho
o    Pre-Orden
o    In-Orden
o    Post-Orden

RECORRIDO PRE-ORDEN








Pre-Orden (raíz-izq-der)
Pre-Orden: A-B-D-E-C-F-G
1- Visitar el nodo raíz
2- Recorrer el subárbol derecho en pre-orden
3- Recorrer el subárbol derecho en pre-orden
RECORRIDO IN-ORDEN
In-Orden (izq-raíz-der)








In-Orden: D-B-E-A-F-C-G

1- Recorrer el subárbol izquierdo en in-orden
2- Visitar la raíz
3- Recorrer el subárbol derecho en in-orden
RECORRER POST-ORDEN
Post-Orden (izq-der-raíz)








Post-Orden: D-E-B-F-G-C-A
1- Recorrer el subárbol derecho en post-orden
2- Recorrer el subárbol derecho en postorden
3- Visitar la raíz

IMPLEMENTACION
Clase NODO
public class Nodo {

    private Nodo pd;
    private Object dato;
    private Nodo pi;

    public Nodo(Object dato){
        this.dato=dato;
        pd=null;
        pi=null;
    }

public Object getDato() {return dato;}

public void setDato(Object dato) {this.dato = dato;}

public Nodo getPd() {return pd;}

public void setPd(Nodo pd) {this.pd = pd;}

public Nodo getPi() {return pi;}

public void setPi(Nodo pi) {this.pi = pi;}

}

CLASE ARBOL
public class Arbol {

     private Nodo Raiz;

     public Arbol(){ Raiz=null;}

     // insertar(Raiz, Raiz, x)


      public boolean arbolVacio(){return Raiz == null;}


      public void insertar(Nodo ant, Nodo p, Nodo x){

         if (p != null){
             if (Integer.parseInt(x.getDato().toString()) >                 Integer.parseInt(p.getDato().toString())) {
                   insertar(p, p.getPd(), x);
                }else{
                   insertar(p, p.getPi(), x);
                }
            }else{
               if (arbolVacio()){
                     Raiz = x;
               }else{
                  if (Integer.parseInt(x.getDato().toString()) >  Integer.parseInt(ant.getDato().toString())) {
                    ant.setPd(x);
                  }else {
                     ant.setPi(x);
                  }
               }
            }
}

public void imprimir(Nodo p){

if(p != null){
       imprimir(p.getPi());
       System.out.print(p.getDato()+"; ");
       imprimir(p.getPd());
}
}

public Nodo getRaiz() {
   return Raiz;
}
public void setRaiz(Nodo raiz) {
    Raiz = raiz;
}
public void eliminar(Nodo ant, Nodo p){
   if(esNodoHoja(p)){
         eliminarNodoHoja(ant, p);
   }else{
        if (esNodoCon2SubArboles(p)){
              eliminarNodoCon2SubArboles(ant, p);
        }else{
           eliminarNodoCon1SubArnol(ant, p);
        }
    }
}

public void eliminarNodoHoja(Nodo ant, Nodo p){
if (Raiz != p){
   if(ant.getPd() == p){
          ant.setPd(null);
   }else{
         ant.setPi(null);
   }
}else{
   Raiz = null;
}
}
public void eliminarNodoCon1SubArnol(Nodo ant, Nodo p){
if (Raiz == p){
     if(p.getPd() != null){
         Raiz = Raiz.getPd();
     }else{
         Raiz = Raiz.getPi();
     }
}else{
     if ( ant.getPd() == p){
           if(p.getPd() != null){
                ant.setPd(p.getPd());
           }else{
               ant.setPd(p.getPi());
           }
    }else{
        if(p.getPd() != null){
            ant.setPi(p.getPd());
        }else{
           ant.setPi(p.getPi());
    }
}
}
}
public boolean esNodoHoja(Nodo p){return (p.getPi() == null && p.getPd() == null);}
public boolean esNodoCon2SubArboles(Nodo p){return (p.getPi() != null && p.getPd() != null);}
CLASEARBOLAPLICACION
import java.io.*;
import java.io.InputStreamReader;
public class ArbolAplicacion {
       Arbol miArbol;
       BufferedReader entrada;
      public ArbolAplicacion(){
             miArbol = new Arbol();
             entrada = new BufferedReader(new InputStreamReader(System.in));
       }

       public void generar()throws Exception{
           // Nodo p = miArbol.getRaiz();
           char op='s';
           while(op !='n' && op!='N'){
           System.out.println(" Ingrese elemento");
           Object elem = entrada.readLine();
           Nodo x = new Nodo(elem);
           miArbol.insertar(miArbol.getRaiz(), miArbol.getRaiz(), x);

           System.out.println(" Continuar enter/ n");
           String opcion=entrada.readLine();
           opcion=opcion.equals("")?"a":opcion;
            op = opcion.charAt(0);

        }
     }
       public void eliminarNodo()throws Exception{
            // Nodo p = miArbol.getRaiz();
            char op='s';
            while(op !='n' && op!='N'){

            System.out.println(" Ingrese elemento");

            Object elem = entrada.readLine();
            Nodo x=new Nodo(elem);
            // Buscar
           buscarEnElArbol(miArbol.getRaiz(), miArbol.getRaiz(), x);
           System.out.println(" Continuar enter/ n");
           String opcion=entrada.readLine();
           opcion=opcion.equals("")?"a":opcion;
            op = opcion.charAt(0);

          }
        }

public void buscarEnElArbol(Nodo ant, Nodo p, Nodo x){
   if(p!=null){
if(Integer.parseInt(x.getDato().toString())==Integer.parseInt(p.getDato().toString())){
miArbol.eliminar(ant, p);
}else{
if(Integer.parseInt(x.getDato().toString())>Integer.parseInt(p.getDato().toString())){
buscarEnElArbol(p,p.getPd(),x);
}else{
buscarEnElArbol(p,p.getPi(),x);
}
}
}
}
public void imprimirArbol(){
System.out.println("=====================");
System.out.println("Elementos del arbol");
miArbol.imprimir(miArbol.getRaiz()) ;
System.out.println("");
System.out.println("=====================");}

public void mostrarOpciones(){
System.out.println("=================");
System.out.println(" Opciones de Arbol");
System.out.println("1- Generar");
System.out.println("2- Eliminar");
System.out.println("3- Imprimir");
System.out.println("Ingrese su opciones:"); }
public void menu()throws Exception{
int op = 9;
do{
switch (op) {
case 1: generar(); break;
case 2: eliminarNodo(); break;
case 3: imprimirArbol(); break;}
mostrarOpciones();
String opc = entrada.readLine();
opc = opc.equals("")?"9":opc;
op=Integer.parseInt(opc);
}while(op!=0);
}
public static void main(String[] args)throws Exception {
ArbolAplicacion mi=new ArbolAplicacion();
mi.menu();
}
}
CLASE PRINCIPAL
public class Principal {
public static void main(String[] args) throws Exception {
ArbolAplicacion miA=new ArbolAplicacion();
miA.menu();


GRAFOS


 Un grafo como un conjunto finito de puntos (nodos, vértices), algunos conectados por líneas (llamadas aristas).
Un gráfico dirigido es un conjunto finito de puntos, algunos de los cuales están conectados mediante flechas, éstas determinan la orientación de las aristas.






APLICASIONES

 public class DibujarPoligonos extends JFrame {

 // establecer cadena de barra de título y dimensiones de la ventana
 public DibujarPoligonos()
 {
 super( "Dibujo de polígonos" );

 setSize( 275, 230 );
 setVisible( true );
 }

 // dibujar polígonos y polilíneas
 public void paint( Graphics g ) {
 super.paint( g ); // llamar al método paint de la superclase
 int valoresX[] = { 20, 40, 50, 30, 20, 15 };
 int valoresY[] = { 50, 50, 60, 80, 80, 60 };
 Polygon poligono1 = new Polygon( valoresX, valoresY, 6 );
 g.drawPolygon( poligono1 );
 int valoresX2[] = { 70, 90, 100, 80, 70, 65, 60 };
 int valoresY2[] = { 100, 100, 110, 110, 130, 110, 90 };
 g.drawPolyline( valoresX2, valoresY2, 7 );
 int valoresX3[] = { 120, 140, 150, 190 };
 int valoresY3[] = { 40, 70, 80, 60 };
 g.fillPolygon( valoresX3, valoresY3, 4);
 Polygon poligono2 = new Polygon();
 poligono2.addPoint( 165, 135 );
 poligono2.addPoint( 175, 150 );
 poligono2.addPoint( 270, 200 );
 poligono2.addPoint( 200, 220 );
 poligono2.addPoint( 130, 180 );

 g.fillPolygon( poligono2 );

 } // fin del método paint
  // ejecutar la aplicación
 public static void main( String args[] ) {
 DibujarPoligonos aplicacion = new DibujarPoligonos();
 aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
 }
  }

2 comentarios:

  1. TOTO's TitaniumBanger - The Art of the
    This beautiful TOTO Stainless men\'s titanium wedding bands Steel titanium dioxide in food razor is made from metal trex titanium headphones alloy, it features titanium dive knife a polished stainless steel frame, is approximately 25”x26”x29”. Rating: 5 titanium nipple bars · ‎4 reviews

    ResponderEliminar