Introducción
En este tema, exploraremos la estructura de datos conocida como pila (stack). Una pila es una colección de elementos que sigue el principio LIFO (Last In, First Out), lo que significa que el último elemento en entrar es el primero en salir. Las pilas son útiles en una variedad de aplicaciones, como la gestión de la memoria, la evaluación de expresiones y la implementación de algoritmos de retroceso.
Conceptos Clave
- LIFO (Last In, First Out): El último elemento añadido a la pila es el primero en ser removido.
- Operaciones Básicas:
- push: Añade un elemento al tope de la pila.
- pop: Remueve y devuelve el elemento en el tope de la pila.
- peek: Devuelve el elemento en el tope de la pila sin removerlo.
- isEmpty: Verifica si la pila está vacía.
- size: Devuelve el número de elementos en la pila.
Implementación de una Pila en Java
Java proporciona la clase Stack
en el paquete java.util
para implementar pilas. A continuación, veremos cómo utilizar esta clase.
Ejemplo Práctico
import java.util.Stack; public class StackExample { public static void main(String[] args) { // Crear una pila Stack<Integer> stack = new Stack<>(); // Añadir elementos a la pila stack.push(10); stack.push(20); stack.push(30); // Mostrar el elemento en el tope de la pila System.out.println("Elemento en el tope: " + stack.peek()); // Remover elementos de la pila System.out.println("Elemento removido: " + stack.pop()); System.out.println("Elemento removido: " + stack.pop()); // Verificar si la pila está vacía System.out.println("¿La pila está vacía? " + stack.isEmpty()); // Mostrar el tamaño de la pila System.out.println("Tamaño de la pila: " + stack.size()); } }
Explicación del Código
- Importación de la Clase Stack: Importamos la clase
Stack
del paquetejava.util
. - Creación de la Pila: Creamos una instancia de
Stack
que almacenará elementos de tipoInteger
. - Operación push: Añadimos tres elementos a la pila (10, 20, 30).
- Operación peek: Mostramos el elemento en el tope de la pila sin removerlo.
- Operación pop: Removemos y mostramos los dos elementos en el tope de la pila.
- Operación isEmpty: Verificamos si la pila está vacía.
- Operación size: Mostramos el número de elementos en la pila.
Ejercicio Práctico
Ejercicio 1
Escribe un programa que utilice una pila para invertir una cadena de texto. Por ejemplo, si la entrada es "Hola", la salida debe ser "aloH".
Solución
import java.util.Stack; public class ReverseString { public static void main(String[] args) { String input = "Hola"; Stack<Character> stack = new Stack<>(); // Añadir cada carácter de la cadena a la pila for (char c : input.toCharArray()) { stack.push(c); } // Construir la cadena invertida StringBuilder reversed = new StringBuilder(); while (!stack.isEmpty()) { reversed.append(stack.pop()); } System.out.println("Cadena invertida: " + reversed.toString()); } }
Explicación del Código
- Creación de la Pila: Creamos una pila para almacenar caracteres.
- Añadir Caracteres a la Pila: Iteramos sobre cada carácter de la cadena de entrada y lo añadimos a la pila.
- Construir la Cadena Invertida: Removemos cada carácter de la pila y lo añadimos a un
StringBuilder
para formar la cadena invertida.
Resumen
En este tema, hemos aprendido sobre la estructura de datos de la pila y cómo implementarla en Java utilizando la clase Stack
. Hemos cubierto las operaciones básicas de una pila y hemos visto un ejemplo práctico de cómo invertir una cadena de texto utilizando una pila. Con estos conocimientos, estás preparado para utilizar pilas en tus propios proyectos y resolver problemas que requieran una estructura LIFO.
En el próximo tema, exploraremos el manejo de excepciones en Java, lo que te permitirá escribir programas más robustos y manejables.
Curso de Programación en Java
Módulo 1: Introducción a Java
- Introducción a Java
- Configuración del Entorno de Desarrollo
- Sintaxis y Estructura Básica
- Variables y Tipos de Datos
- Operadores
Módulo 2: Flujo de Control
Módulo 3: Programación Orientada a Objetos
- Introducción a la POO
- Clases y Objetos
- Métodos
- Constructores
- Herencia
- Polimorfismo
- Encapsulamiento
- Abstracción
Módulo 4: Programación Orientada a Objetos Avanzada
Módulo 5: Estructuras de Datos y Colecciones
Módulo 6: Manejo de Excepciones
- Introducción a las Excepciones
- Bloque Try-Catch
- Throw y Throws
- Excepciones Personalizadas
- Bloque Finally
Módulo 7: Entrada/Salida de Archivos
- Lectura de Archivos
- Escritura de Archivos
- Flujos de Archivos
- BufferedReader y BufferedWriter
- Serialización
Módulo 8: Multihilo y Concurrencia
- Introducción al Multihilo
- Creación de Hilos
- Ciclo de Vida de un Hilo
- Sincronización
- Utilidades de Concurrencia
Módulo 9: Redes
- Introducción a las Redes
- Sockets
- ServerSocket
- DatagramSocket y DatagramPacket
- URL y HttpURLConnection