EVALUACION DE EXPRESIONES EN JAVA


Cuando se escriben programas en un lenguaje convencional de programa-ción, que tienen que ver con la evaluación de expresiones, se tiene el problema que la expresión a evaluar desde la entrada no siempre es la misma o del mismo tipo. Por ello el programador debe escribir el código necesario para que la entrada de sus programas sea lo más general posible, permitiendo un comportamiento adecuado frente a expresiones y/ofunciones en la entrada.
TIPOS DE EXPRESIONES
En esta parte vamos a evidenciar cuales son las expresiones que se utilizan para porder realizar las evaluaciones.
  •  Notación infija.- operando-operador-operando. Ejemplo: A + B
  •  Notación prefija.- operador-operando-operando. Ejemplo: + A B
  •  Notación postfija.- operando-operando-operador. Ejemplo: A B +
JERARQUIA EN  LA EVALUACION DE EXPRESIONES
A continuacion en la siguiente tabla se podra evidenciar como es el nivel de importancia que adquiere los operadores al momento de hacer cualquier evaluacion de las expresiones.

Programa de Evaluacion de Expresiones
       
import java.util.Scanner;
import java.util.Stack;

/**
 *
 * @author Administrador
 */
public class Expresiones {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        
         System.out.println("*Escribe una expresión algebraica:");
 
Scanner leer = new Scanner(System.in);
 
//Depurar la expresion algebraica
 
 String expr = depurar(leer.nextLine());
 String[] arrayInfix = expr.split(" ");
 
//Declaración de las pilas
 
 Stack < String > E = new Stack < String > ();
 //Pilaentrada
 
 Stack < String > P = new Stack < String > ();
 //Pilatemporal para operadores
 
 Stack < String > S = new Stack < String > ();
 //Pilasalida
 
//Añadir la array a la Pila de entrada (E)
 
  for (int i = arrayInfix.length - 1; i >= 0; i--) {
 
    E.push(arrayInfix[i]);
 
        }try {
 
//Algoritmo Infijo a Postfijo
 
  while (!E.isEmpty()) {
 
 switch (pref(E.peek())){
 
    case 1:
 
        P.push(E.pop());
 
 break;

case 4:
 
 while(pref(P.peek()) >= pref(E.peek())) {
 
        S.push(P.pop());
 
        }
 
        P.push(E.pop());
 
    break;case 2:
 
 while(!P.peek().equals("(")) {
 
S.push(P.pop());
 
}
 
P.pop();
 
E.pop();
 
 break;default:
 
S.push(E.pop());}
 
}
 //Eliminacion de `impurezas´ en la expresionesalgebraicas
 
String infix = expr.replace(" ", "");
 
String postfix = S.toString().replaceAll("[\\]\\[,]","");
 
//Mostrar resultados:
 
System.out.println("Expresion Infija: " + infix);
 
System.out.println("Expresion Postfija: " + postfix);
 
}catch(Exception ex){System.out.println("Error en la expresión algebraica");
 
System.err.println(ex);
 
}
 
}//Depurar expresión algebraica
 
private static String depurar(String s) {
 
s = s.replaceAll("\\s+", "");//Elimina espacios enblanco
 
s = "(" + s + ")";
 
String simbols = "+-*/()";
 
String str = "";
 
//Deja espacios entre operadores
 
for (int i = 0; i < s.length(); i++) {
 
if (simbols.contains("" + s.charAt(i))) {
 
str += " " + s.charAt(i) + " ";
 
}else str += s.charAt(i);
 
 
}
 
return str.replaceAll("\\s+", " ").trim();
 
}//Jerarquia de los operadores
 
private static int pref(String op) {
 
int prf = 99;
 
if (op.equals("^")) prf = 5;
 
if (op.equals("*") || op.equals("/")) prf = 4;
 
if (op.equals("+") || op.equals("-")) prf = 3;
 
 if (op.equals(")")) prf = 2;
 
if (op.equals("(")) prf = 1;
 
return prf;
        // TODO code application logic here
    }
    
}



       
 
 
 

LISTAS CIRCULARES


Para este teme lo que hay que tener clara es la definicion de una lista circular es una especie de lista enlazada simple o doblemente enlazada, pero que posee una característica adicional para el desplazamiento dentro de la lista: esta no tiene fin.
Para que la lista sea sin fin, el puntero siguiente del último elemento apuntará hacia el primer elemento de la lista en lugar de apuntar al valor NULL, como hemos visto en el caso de listas enlazadas simples o doblemente enlazadas.

Caracteristicas Importantes de una Lista Circular 
  • En las listas circulares, nunca se llega a una posición en la que ya no sea posible desplazarse. Cuando se llegue al último elemento, el desplazamiento volverá a comenzar desde el primer elemento.
  • Para tener el control de la lista es mejor guardar ciertos elementos: el primer elemento, el último elemento y el número de elementos. Para ello, otra estructura será utilizada (no es obligatorio, pueden ser utilizadas variables).  
  • Cualquiera que sea la posición en la lista, los punteros inicio y fin siempre apuntarán hacia el primer y el último elemento respectivamente. 

 Programa Lista Circular 
CLASE NODO 
    
public class Nodo {
    
    private int valor;
    private Nodo siguiente;
   
    public void Nodo(){
        this.valor = 0;
        this.siguiente = null;
    }
    
    // Métodos get y set para los atributos.
    
    public int getValor() {
        return valor;
    }

    public void setValor(int valor) {
        this.valor = valor;
    }

    public Nodo getSiguiente() {
        return siguiente;
    }

    public void setSiguiente(Nodo siguiente) {
        this.siguiente = siguiente;
    }   
    

       
 
 CLASE LISTA CIRCULAR
 
    
public class ListaCircular {
    private Nodo inicio;
    // Puntero que indica el final de la lista o el ultimo nodo.
    private Nodo ultimo;
    // Variable para registrar el tamaño de la lista.
    private int tamanio;
    /**
     * Constructor por defecto.
     */
    public void Lista(){
        inicio = null;
        ultimo = null;
        tamanio = 0;
    }
    /**
     * Consulta si la lista esta vacia.
     * @return true si el primer nodo (inicio), no apunta a otro nodo.
     */
    public boolean esVacia(){
        return inicio == null;
    }
    /**
     * Consulta cuantos elementos (nodos) tiene la lista.
     * @return numero entero entre [0,n] donde n es el numero de elementos
     * que contenga la lista.
     */
    public int getTamanio(){
        return tamanio;
    }
    /**
     * Agrega un nuevo nodo al final de la lista circular.
     * @param valor a agregar.
     */
    public void agregarAlFinal(int valor){
        // Define un nuevo nodo.
        Nodo nuevo = new Nodo();
        // Agrega al valor al nodo.
        nuevo.setValor(valor);
        // Consulta si la lista esta vacia.
        if (esVacia()) {
            // Inicializa la lista agregando como inicio al nuevo nodo.
            inicio = nuevo;
            // De igual forma el ultimo nodo sera el nuevo.
            ultimo = nuevo;
            // Y el puntero del ultimo debe apuntar al primero.
            ultimo.setSiguiente(inicio);
        // Caso contrario el nodo se agrega al final de la lista.
        } else{
            // Apuntamos con el ultimo nodo de la lista al nuevo.
            ultimo.setSiguiente(nuevo);
            // Apuntamos con el nuevo nodo al inicio de la lista.
            nuevo.setSiguiente(inicio);
            // Como ahora como el nuevo nodo es el ultimo se actualiza
            // la variable ultimo.
            ultimo = nuevo;
        }
        // Incrementa el contador de tamaño de la lista
        tamanio++;
    }
    /**
     * Agrega un nuevo nodo al inicio de la lista circular.
     * @param valor a agregar.
     */   
    public void agregarAlInicio(int valor){
        // Define un nuevo nodo.
        Nodo nuevo = new Nodo();
        // Agrega al valor al nodo.
        nuevo.setValor(valor);
        // Consulta si la lista esta vacia.
        if (esVacia()) {
            // Inicializa la lista agregando como inicio al nuevo nodo.
            inicio = nuevo;
            // De igual forma el ultimo nodo sera el nuevo.
            ultimo = nuevo;  
            // Y el puntero del ultimo debe apuntar al primero.
            ultimo.setSiguiente(inicio);
        // Caso contrario va agregando los nodos al inicio de la lista.
        } else{
            // Une el nuevo nodo con la lista existente.
            nuevo.setSiguiente(inicio);
            // Renombra al nuevo nodo como el inicio de la lista.
            inicio = nuevo;
            // El puntero del ultimo debe apuntar al primero.
            ultimo.setSiguiente(inicio);
        }
        // Incrementa el contador de tamaño de la lista.
        tamanio++;
    }
    /**
     * Inserta un nuevo nodo despues de otro, ubicado por el valor que contiene.
     * @param referencia valor del nodo anterios al nuevo nodo a insertar.
     * @param valor del nodo a insertar.
     */
    public void insertarPorReferencia(int referencia, int valor){
        // Define un nuevo nodo.
        Nodo nuevo = new Nodo();
        // Agrega al valor al nodo.
        nuevo.setValor(valor);
        // Verifica si la lista contiene elementos
        if (!esVacia()) {
            // Consulta si el valor existe en la lista.
            if (buscar(referencia)) {
                // Crea ua copia de la lista.
                Nodo aux = inicio;
                // Recorre la lista hasta llegar al nodo de referencia.
                while (aux.getValor() != referencia) {
                    aux = aux.getSiguiente();
                }
                // Consulta si el nodo a insertar va despues del ultimo
                if (aux == ultimo) {
                    // Apuntamos con el ultimo nodo de la lista al nuevo.
                    aux.setSiguiente(nuevo);
                    // Apuntamos con el nuevo nodo al inicio de la lista.
                    nuevo.setSiguiente(inicio);
                    // Como ahora como el nuevo nodo es el ultimo se actualiza
                    // la variable ultimo.
                    ultimo = nuevo;
                } else {
                    // Crea un respaldo de la continuación de la lista.
                    Nodo siguiente = aux.getSiguiente();
                    // Enlaza el nuevo nodo despues del nodo de referencia.
                    aux.setSiguiente(nuevo);
                    // Une la continuacion de la lista al nuevo nodo.
                    nuevo.setSiguiente(siguiente);
                }
                // Incrementa el contador de tamaño de la lista.
                tamanio++;
            }
        }      
    }
    /**
     * Inserta un nuevo nodo despues en una posición determinada.
     * @param posicion en la cual se va a insertar el nuevo nodo.
     * @param valor valor del nuevo nodo de la lista.
     */
    public void insrtarPorPosicion(int posicion, int valor){
        // Verifica si la posición ingresada se encuentre en el rango
        // >= 0 y <= que el numero de elementos del la lista.
        if(posicion>=0 && posicion<=tamanio){
            Nodo nuevo = new Nodo();
            nuevo.setValor(valor);
            // Consulta si el nuevo nodo a ingresar va al inicio de la lista.
            if(posicion == 0){
                // Une el nuevo nodo con la lista existente.
                nuevo.setSiguiente(inicio);
                // Renombra al nuevo nodo como el inicio de la lista.
                inicio = nuevo;
                // El puntero del ultimo debe apuntar al primero.
                ultimo.setSiguiente(inicio);
            }
            else{
                // Si el nodo a inserta va al final de la lista.
                if(posicion == tamanio){
                    // Apuntamos con el ultimo nodo de la lista al nuevo.
                    ultimo.setSiguiente(nuevo);
                    // Apuntamos con el nuevo nodo al inicio de la lista.
                    nuevo.setSiguiente(inicio);
                    // Como ahora como el nuevo nodo es el ultimo se actualiza
                    // la variable ultimo.
                    ultimo = nuevo;     
                }
                else{
                    // Si el nodo a insertar va en el medio de la lista.
                    Nodo aux = inicio;
                    // Recorre la lista hasta llegar al nodo anterior
                    // a la posicion en la cual se insertara el nuevo nodo.
                    for (int i = 0; i < (posicion-1); i++) {
                        aux = aux.getSiguiente();
                    }
                    // Guarda el nodo siguiente al nodo en la posición
                    // en la cual va a insertar el nevo nodo.
                    Nodo siguiente = aux.getSiguiente();
                    // Inserta el nuevo nodo en la posición indicada.
                    aux.setSiguiente(nuevo);
                    // Une el nuevo nodo con el resto de la lista.
                    nuevo.setSiguiente(siguiente);
                }
            }
            // Incrementa el contador de tamaño de la lista.
            tamanio++;
        }
    }
    /**
     * Obtiene el valor de un nodo en una determinada posición.
     * @param posicion del nodo que se desea obtener su valor.
     * @return un numero entero entre [0,n-1] n = numero de nodos de la lista.
     * @throws Exception
     */
    public int getValor(int posicion) throws Exception{
        // Verifica si la posición ingresada se encuentre en el rango
        // >= 0 y < que el numero de elementos del la lista.
        if(posicion>=0 && posicion= 0 y < que el numero de elementos del la lista.
        if(posicion>=0 && posicion= 0 y < que el numero de elementos del la lista.
        if(posicion>=0 && posicion ");
            // Recorre la lista hasta llegar nuevamente al incio de la lista.
            do{
                // Imprime en pantalla el valor del nodo.
                System.out.print(i + ".[ " + aux.getValor() + " ]" + " ->  ");
                // Avanza al siguiente nodo.
                aux = aux.getSiguiente();
                // Incrementa el contador de la posión.
                i++;
            }while(aux != inicio);
        }
    }
    
}


       
 
 CLASE MAIN
    
public class Main {
    public static void main(String[] args)throws Exception{
        ListaCircular listaCircular = new ListaCircular();
        
        System.out.println("<<-- Ejemplo de lista circular simple -->>\n");
        
        // Agregar al final de la lista circular
        listaCircular.agregarAlFinal(12);
        listaCircular.agregarAlFinal(15);
        listaCircular.agregarAlFinal(9);
        // Agregar in inicio de la lista circular
        listaCircular.agregarAlInicio(41);
        listaCircular.agregarAlInicio(6);
        
        System.out.println("<<-- Lista Circular -->>");
        listaCircular.listar();
        
        System.out.println("\n\n<<-- Tamaño -->");
        System.out.println(listaCircular.getTamanio());
        
        System.out.println("\n<<-- Obtener el valor del nodo en la posicion 3 -->>");
        System.out.println(listaCircular.getValor(3));
        
        System.out.println("\nInsrta un nodo con valor 16 despues del 15");
        listaCircular.insertarPorReferencia(15, 16);
        listaCircular.listar();
        System.out.print(" | Tamaño: ");
        System.out.println(listaCircular.getTamanio());        
        
        System.out.println("\n\nInsrta un nodo con valor 44 en la posición 5");
        listaCircular.insrtarPorPosicion(5, 44);
        listaCircular.listar();
        System.out.print(" | Tamaño: ");
        System.out.println(listaCircular.getTamanio());       
        
        System.out.println("\nActualiza el valor 12 del tercer nodo por 13");
        listaCircular.editarPorReferencia(12, 13);
        listaCircular.listar();
        System.out.print(" | Tamaño: ");
        System.out.println(listaCircular.getTamanio());
        
        System.out.println("\nActualiza el valor nodo en la posición 0 por 17");
        listaCircular.editarPorPosicion(0, 17);
        listaCircular.listar();
        System.out.print(" | Tamaño: ");
        System.out.println(listaCircular.getTamanio());
            
        System.out.println("\nElimina el nodo con el valor 41");
        listaCircular.removerPorReferencia(41);        
        listaCircular.listar();
        System.out.print(" | Tamaño: ");
        System.out.println(listaCircular.getTamanio());        
        
        System.out.println("\nElimina el nodo en la posición 4");
        listaCircular.removerPorPosicion(4);        
        listaCircular.listar();
        System.out.print(" | Tamaño: ");
        System.out.println(listaCircular.getTamanio());
        
        System.out.println("\nConsulta si existe el valor 30");
        System.out.println(listaCircular.buscar(30));
        
        System.out.println("\nConsulta la posicion del valor 16");
        System.out.println(listaCircular.getPosicion(16));
        
        System.out.println("\nElimina la lista");
        listaCircular.eliminar();        
      
        System.out.println("\nConsulta si la lista está vacia");
        System.out.println(listaCircular.esVacia());
        
        System.out.println("\n\n<<-- Fin de ejemplo lista simple -->>");
    }
    
}

       

COLAS EN JAVA

Una cola es simplemente un lugar para almacenar cosas, donde esas cosas se insertan una detrás de otra y para extraer siempre se lo hace por adelante de la cola donde se encuentra el primer elemento. Una cola funciona como una fila o cola de personas, que esperan su turno para ser atendidas, la primera persona atendida es siempre la primera de la fila y cuando llega una persona y queremos incorporarla a cola o adicionarla debemos hacerlo por detrás de la ultima persona en la cola.

Las operaciones que se utilizan son los siguinetes:
   - Insertar un objeto en la pila (push).
   - Recuperar un objeto de la pila (pop).
   - Obtener el objeto de la cima (top) de la pila, sin extraerlo.
   - Averiguar si hay algún objeto almacenado en la pila.
   - Devolver el número de objetos almacenados en la pila. 
 COLAS PRIORIDAD 
Una cola de prioridades es un tipo de dato abstracto similar a una cola en la que los elementos tienen adicional mente, una prioridad asignada. En una cola de prioridades un elemento con mayor prioridad será desencolado antes que un elemento de menor prioridad. Si dos elementos tienen la misma prioridad, se desencolarán siguiendo el orden de cola.



Mapa Conceptual de lo que es un Cola en Java

 Programa Colas

    public class Nodo {
   
    private int valor;
    private Nodo siguiente;
   
    public void Nodo(){
        this.valor = 0;
        this.siguiente = null;
    }
    
    // Métodos get y set para los atributos.
    
    public int getValor() {
        return valor;
    }

    public void setValor(int valor) {
        this.valor = valor;
    }

    public Nodo getSiguiente() {
        return siguiente;
    }

    public void setSiguiente(Nodo siguiente) {
        this.siguiente = siguiente;
    }   
    
}


       
 
CLASE COLA
  
 public class ColaArray {
 private static final int MAXTAM = 3;
 private int frente;
 private int ultimo;
 private int []cola;
 public ColaArray(){
  frente = 0;
  ultimo = -1;
  cola = new int [MAXTAM];
 }
 public void insertarQ(int elemento)throws Exception{
  if (!ColaLlena())
   cola[++ultimo]= elemento;
  else
   throw new Exception ("Error en la cola: Cola LLena");
  
 }
 
 public int eliminarQ() throws Exception{
  if (!ColaVacia())
   return cola[frente++];
  else
   throw new Exception ("Cola vacia");
 }
 
 public void BorrarQ(){
  frente = 0;
  ultimo = -1;
 }
 
 public int frenteQ()throws Exception{
  if (!ColaVacia())
   return cola[frente];
  else
   throw new Exception ("Cola vacia");
 }
 
 public boolean ColaVacia(){
  return frente > ultimo;
 }
 
 public boolean ColaLlena(){
  return ultimo == MAXTAM - 1;
 }
 
 
}


       
 
CLASE MAIN
 
       
public class EjecutaCola {
static int n=0,elemento=0;
 
 public static void main(String[] args)throws Exception {
  ColaArray k=new ColaArray();
  BufferedReader b=new BufferedReader
    (new InputStreamReader(System.in));
 
  
  do{
   System.out.println("---- ELIJA LA OPERACION A REALIZAR ----");
   System.out.println("----------------- MENU -----------------");
   System.out.println("1. Ingresar elementos");
   System.out.println("2. Eliminar elementos");// CONTROLAR Q SI ELIMINA SE PERCATE DE Q NO ESTE VACIA 
   System.out.println("3. Ver si la cola esta vacia");
   System.out.println("4. Ver el frente de la cola");// SI NO HAY ELEMENTOS QUE DESPLIGUE UN MENSAJE Q NO HAY ELEMENTOS
   System.out.println("5. Borrar");
   System.out.println("6. Ver si la cola esta  llena");
   System.out.println("7. SALIR");
   n=Integer.parseInt(b.readLine());
   if(n==1){
    if(k.ColaLlena()){
     System.out.println("COLLA LLENA NO SE PUEDE INGRESAR ELEMENTOS");
    }else
    System.err.print("// INGRESE LOS ELEMNTOS //= ");
    elemento=Integer.parseInt(b.readLine());
    k.insertarQ(elemento);
   }
   if(n==2){
    if(k.ColaVacia()){
     System.err.println("LA COLAN ESTA VACIA NO PUEDE ELIMINA ELEMENTOS");
    }else
    System.out.println(k.eliminarQ());
   }
   if(n==3){
    if(k.ColaVacia()){
     System.out.println("LA COLA ESTA VACIA");
    }else
     System.out.println("LA COLA NO ESTA VACIA ");
   }
   if(n==4){
    if(k.ColaVacia()){
     System.err.println("LA COLAN ESTA VACIA NO hay elemento en el frente");
    }else
    System.out.println("EL FRENTE DE LA COLA ES= "+k.frenteQ());
    
   }
   if(n==5){
    k.BorrarQ();
    
   }
   if(n==6){
    k.ColaLlena();
    if(k.ColaLlena()){
     System.out.println("LA COLA ESTA LLENA");
    }else
     System.out.println("LA COLA NO ESTA LLENA");
   }
   if(n==7){
    System.exit(0);
   }
   
   
   
  }while(n!=7);
  
  
  
 }

}




       
 
 

PILAS EN JAVA


Lo primero que se debe saber del tema Pilas en java es ¿Que es una Pila?
Una pila es una estructura que nos permite apilar elementos y recopilarlos en el orden inverso al cual los apilamos mediante operaciones de desapilar. Esto es lo que se conoce como estructuras LIFO (Last In First Out).
 La spilas tinen tres operaciones con las cuale se pueden trabajar que son las siguientes:
  1. apilar, añade un elemento a la lista.
  2. desapilar, retira un elemento de la lista
  3. está vacía, comprueba si la lista está vací. 
Los metodos que se utilizan para realizar estas operaciones con pilas son las siguientes:
  •  PUSH (pila, elemento): Introduce un elemento en la pila. También se le conoce como poner o meter.
  •  POP (pila): Elimina un elemento de la pila. También se le conoce como sacar o quitar. 
  •  VACIA(pila): Función booleana que indica si la pila esta vacía o no. 
Ejemplo de como se almcena una pila en java.
Mapa Conceptual Pilas 



 Programa PILAS

Clase Nodo
 
    public class Nodo {
    
    private int valor;
    private Nodo siguiente;
   
    public void Nodo(){
        this.valor = 0;
        this.siguiente = null;
    }
    
    // Métodos get y set para los atributos.
    
    public int getValor() {
        return valor;
    }

    public void setValor(int valor) {
        this.valor = valor;
    }

    public Nodo getSiguiente() {
        return siguiente;
    }

    public void setSiguiente(Nodo siguiente) {
        this.siguiente = siguiente;
    }   
    

       
 
 
Clase Pila 
    

  public class Pila {
    
    private Nodo inicio;
    private int tamanio;
    
    public void Pila(){
        inicio = null;
        tamanio = 0;
    }
    
    public boolean esVacia(){
        return inicio == null;
    }
    
    public int getTamanio(){
        return tamanio;
    }
    
    public void apilar(int valor){
    
        Nodo nuevo = new Nodo();
        nuevo.setValor(valor);
        if (esVacia()) {
            inicio = nuevo;
        }
        
        else{
            nuevo.setSiguiente(inicio);
            inicio = nuevo;
        }
        
        tamanio++;
    } 
    
    public void retirar(){
        if (!esVacia()) {
            // Asigna como primer nodo al siguiente de la pila.
            inicio = inicio.getSiguiente();
            // Decrementa el contador del tamaño de la pila
            tamanio--;
        }
    }
    
    public int cima() throws Exception{
        if(!esVacia()){
            return inicio.getValor();
        } else {
            throw new Exception("La pila se encuentra vacia.");
        }
    }
    
    public boolean buscar(int referencia){
    
        Nodo aux = inicio;
        boolean existe = false;
        
        while(existe != true && aux != null){
        
            if (referencia == aux.getValor()) {
                // Cambia el valor de la bandera.
                existe = true;
            }
            else{
                // Avanza al siguiente nodo.
                aux = aux.getSiguiente();
            }
        }
        // Retorna el valor de la bandera.
        return existe;
    }
      
    public void remover(int referencia){
        // Consulta si el valor existe en la pila.
        if (buscar(referencia)) {
            // Crea una pila auxiliar para guardar los valores que se 
            // vayan desapilando de la pila original.
            Nodo pilaAux = null;
            while(referencia != inicio.getValor()){
                Nodo temp = new Nodo();
                temp.setValor(inicio.getValor());
                if(pilaAux == null){
                    pilaAux = temp;
                }
                else{
                    temp.setSiguiente(pilaAux);
                    pilaAux = temp;
                }
                retirar();
            }
           retirar();
           while(pilaAux != null){
                apilar(pilaAux.getValor());
                pilaAux = pilaAux.getSiguiente();
            }
    
            pilaAux = null;
        }
    }    
    public void editar(int referencia, int valor){
        // Consulta si el nodo existe en la pila
        if (buscar(referencia)) {
            // Crea una pila auxiliar.
            Nodo pilaAux = null;
            while(referencia != inicio.getValor()){
                Nodo temp = new Nodo();
                // Ingresa el valor al nodo temporal.
                temp.setValor(inicio.getValor());
                // Consulta si la pila auxiliar no a sido inicializada.
                if(pilaAux == null){
                    // Inicializa la pila auxiliar.
                    pilaAux = temp;
                }
                else{
                    temp.setSiguiente(pilaAux);
                    pilaAux = temp;
                }
                retirar();
            }
            // Actualiza el valor del nodo.
            inicio.setValor(valor);
            while(pilaAux != null){
                apilar(pilaAux.getValor());
                // Avansa al siguiente nodo de la pila auxiliar.
                pilaAux = pilaAux.getSiguiente();
            }
            // Libera la memoria utilizada por la pila auxiliar.
            pilaAux = null;
        }
    }
    public void eliminar(){
        // Elimina el valor y la referencia a los demas nodos.
        inicio = null;
        // Reinicia el contador a 0.
        tamanio = 0;
    }
    public void listar(){
        Nodo aux = inicio;
        while(aux != null){
            System.out.println("|\t" + aux.getValor() + "\t|");
            System.out.println("-----------------");
            aux = aux.getSiguiente();
        }
    }
}       

       
 
 
Main Principal
    
public static void main(String[] args) {
        Pila pila = new Pila();
        
        System.out.println("<<-- --="" de="" ejemplo="" pila="">>\n\n");
        
        pila.apilar(4);
        pila.apilar(16);
        pila.apilar(12);
        pila.apilar(8);
        pila.apilar(65);
        
        System.out.println("<<-- --="" pila="">>");
        pila.listar();
        System.out.println("\n<<-- --="" o="" tama="">");
        System.out.println(pila.getTamanio());
        
        System.out.println("\n<<-- --="" de="" del="" el="" elemento="" la="" pila="" retirar="" tope="">>");
        pila.retirar();
        pila.listar();
        System.out.println("Tamaño: " + pila.getTamanio());
        
        System.out.println("\n<<-- --="" 12="" 24="" actualizar="" con="" del="" el="" nodo="" por="" valor="">>");
        pila.editar(12, 44);
        pila.listar();
        System.out.println("Tamaño: " + pila.getTamanio());
        
        System.out.println("\n<<-- --="" 16="" con="" el="" eliminar="" nodo="" valor="">>");
        pila.remover(16);
        pila.listar();
        System.out.println("Tamaño: " + pila.getTamanio());
        
        System.out.println("\n<<-- --="" 65="" consulta="" el="" existe="" si="" valor="">>");
        System.out.println(pila.buscar(65));
        
        System.out.println("\n<<-- --="" elimina="" la="" pila="">>");
        pila.eliminar();
        
        System.out.println("\n<<-- --="" consulta="" esta="" la="" pila="" si="" vacia="">>");
        System.out.println(pila.esVacia());
        
        System.out.println("\n\n<<-- --="" de="" ejemplo="" fin="" pila="">>");
    }
    }
    
       
 



 

BIENVENIDOS A MI BLOG

ESTRUCTURA DE DATOS

Introducion

La importancia de las computadoras radica fundamentalmente en su capacidad para
procesar información. Esta característica les permite realizar actividades que antes sólo
las realizaban los humanos.
Con el propósito de que la información sea procesada, se requiere que ésta se almacene
en la memoria de la computadora. De acuerdo con la forma en que los datos se
organizan, se clasifican en:
  • Tipos de datos simples
  • Tipos de datos estructurados 
La principal característica de los tipos de datos simples consiste en que ocupan sólo
una casilla de memoria , por tanto, una variable simple hace referencia a un
único valor a la vez. En este grupo de datos se encuentran: números enteros y reales,
caracteres, booleanos, enumerados y subrangos. Cabe señalar que los dos últimos no
existen en algunos lenguajes de programación.
Por otra parte, los tipos de datos estructurados se caracterizan por el hecho de que
con un nombre identificador de variable estructurada se hace referencia a un grupo
de casillas de memoria. Es decir, un tipo de dato estructurado tiene varios
componentes. Cada uno de éstos puede ser un tipo de dato simple o estructurado. Sin
embargo, los componentes básicos, los del nivel más bajo, de cualquier tipo de datos
estructurado son siempre tipos de datos simples.