graph TD
subgraph Stack["📚 Stack (Pila de Libros)"]
B3["Libro 3 (Top)"]
B2["Libro 2"]
B1["Libro 1 (Base)"]
end
style B3 fill:#ffcb77,stroke:#d58f00,stroke-width:2px
style B2 fill:#fefae0,stroke:#b08968
style B1 fill:#e9edc9,stroke:#b08968
Stacks

🧱 Stacks (Pilas)
Las stacks o pilas son estructuras de datos poderosas que permiten resolver muchos problemas de programación. Podemos usarlas para implementar la función Undo en editores de texto, para analizar la sintaxis en compiladores, o para evaluar expresiones aritméticas como:
\[ 3 + (4 \times 2) - 5 \]
También son esenciales en la navegación de aplicaciones, por ejemplo, los botones “atrás” y “adelante” de un navegador web o de un dispositivo Android pueden implementarse usando pilas.
📚 Analogía: una pila de libros
La mejor forma de comprender una pila es imaginar una pila de libros. Podemos apilar varios libros uno encima del otro, pero solo podemos ver o retirar el libro superior. Si queremos acceder al libro de abajo, debemos retirar los libros superiores uno a uno.
👉 Esta dinámica se conoce como LIFO (Last In, First Out) — último en entrar, primero en salir.
🔁 Ejemplo de operaciones básicas
Una pila es una estructura muy simple pero poderosa. Internamente puede implementarse con un array dinámico o una lista enlazada, y soporta las siguientes operaciones:
| Operación | Descripción | Complejidad |
|---|---|---|
push(x) |
Agrega un elemento al tope de la pila | 𝑂(1) |
pop() |
Elimina el elemento del tope | 𝑂(1) |
peek() |
Devuelve el elemento superior sin eliminarlo | 𝑂(1) |
isEmpty() |
Indica si la pila está vacía | 𝑂(1) |
⚙️ Funcionamiento dinámico
Veamos el proceso de apilar y desapilar elementos:
sequenceDiagram
participant Usuario
participant Pila
Usuario->>Pila: push(5)
Pila->>Pila: [5]
Usuario->>Pila: push(8)
Pila->>Pila: [5, 8]
Usuario->>Pila: push(12)
Pila->>Pila: [5, 8, 12]
Usuario->>Pila: pop()
Pila->>Pila: [5, 8]
Usuario->>Pila: peek() → 8
📌 Observa cómo pop() siempre retira el último elemento insertado.
🧠 Introducción a los ejemplos de pilas
En esta sección exploramos de forma práctica cómo funcionan las pilas (stacks) en Java.
Cada archivo incluido a continuación desarrolla un aspecto diferente de esta estructura de datos, permitiendo observar cómo los principios teóricos —inserción y eliminación bajo el esquema LIFO (Last In, First Out)— se traducen en código ejecutable.
El propósito es que el estudiante comprenda no solo la sintaxis, sino la lógica interna de una pila: cómo crece, cómo se vacía y cómo estas operaciones se aplican en problemas reales como la inversión de cadenas o la verificación de expresiones balanceadas.
Los tres ejemplos están organizados de la siguiente manera:
Introduce la clase Stack de Java y las operaciones básicas push, pop, peek y isEmpty.
Muestra un caso de aplicación práctica: invertir una cadena de texto utilizando una pila.
Presenta el algoritmo completo para determinar si una expresión con paréntesis, corchetes o llaves está correctamente balanceada.