Pila, se podría decir que es como una lista enlazada pero a diferencia una pila tiene restricciones al igual que una cola. Una pila funciona de manera contraria a una cola, sabemos que una cola funciona de acuerdo a la siguiente frase: Primero en entrar, primero en salir. Entonces, ya podrías imaginar como funciona una pila «Ultimo en entrar, primero en salir«.

Podrás crear una pila reutilizando el código de una lista enlazada aplicando herencia. Sin embargo, para no complicar las cosas realizaremos el código desde cero.

Las pilas tienen una gran serie de aplicaciones, usted sera capaz de convertir expresiones regulares a infija, posfija y prefija. Ademas, esta presente en todos los sistemas operativos ya que gracias a su gran potencial permiten gestionar las llamadas de metodos que realizan los programas en ejecución.

Como es costumbre, el código que mostraremos mas adelante contiene los metodos básicos de una pila, ejemplo: empujar, sacar, mostrar.

Debemos comenzar creando una clase que nombraremos NodoPila

package estructura.piladinamicasgrafo;

public class NodoPila {

    String elemento;
    NodoPila siguiente;

    public NodoPila(String elemento) {
        this.elemento = elemento;
        siguiente = null;
    }

}

Lo que esta haciendo es crear el nodo, sera utilizado para almacenar los valores que vayan agregando a nuestra lista. La variable siguiente se encarga de hacer una referencia y apuntar los nuevos valores para que estos no se pierdan (aclaro que se realiza en la clase donde se encuentra la logica sobre como funciona una pila).

Lo siguiente es crear una clase Pila, aqui pondremos la logica de la pila.

package estructura.piladinamicasgrafo;

public class PilaDinamica {

    NodoPila cima;
    int tamanio;

    public boolean estaVacia() {
        return cima == null;
    }

    public void Empujar(String elemento) {
        NodoPila nuevo = new NodoPila(elemento);
        nuevo.siguiente = cima;
        cima = nuevo;
        tamanio++;
    }

    public String SacarPila() {
        String auxiliar = cima.elemento;
        cima = cima.siguiente;
        tamanio--;
        return auxiliar;
    }
    
    public void mostrarPila() {
        NodoPila recorre=cima;
        while(recorre!=null) {
            System.out.print("<---[" + recorre.elemento + "]");
            recorre = recorre.siguiente;
        }
    }

}

La variable tamanio, simplemente funciona como contador y esta permite determinar el numero de elementos que han insertado.

El metodo mostrarPila():

Este metodo no es complejo, lo que hacemos es crear una variable auxiliar (en este caso llamada recorrer).

¿Por que debemos crear una variable auxiliar?

Echaremos a volar nuestra imaginación, entonces supongamos que tienes 5 globos los cuales obviamente estas sujetando. Si tú, sueltas los globos obviamente se pierden (esto sucede con nuestra variable cima, debido a que tiene las referencias originales a nuestros nodos. Entonces, al momento de recorrer estarias perdiendo los nodos ya que estas diciendo que cima sea igual a cima de siguiente).

La variable auxiliar (recorrer) vendría siendo un amigo el cual te ayuda a detener los globos. Ahora ambos estan agarrando los globos pero como tu amigo es la variable recorrer y suelta los globos «el ya los perdio» pero tú aun estas sujetando.

Espero este ejemplo te ayude a entender de manera facil, realmente practicando y analizando el código es como se aprende.

Las pilas son muy utilizadas por compiladores, pues estas permiten evaluar las expresiones aritméticas y generar código a nivel de maquina. Realmente la estructura de datos es importante para aquellos que estan empezando a desarrollar aplicaciones, ahora ya sabes como divertirte.

Finalmente, cabe mencionar que deberas crear un menu para utilizar los metodos.