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

  1. Importación de la Clase Stack: Importamos la clase Stack del paquete java.util.
  2. Creación de la Pila: Creamos una instancia de Stack que almacenará elementos de tipo Integer.
  3. Operación push: Añadimos tres elementos a la pila (10, 20, 30).
  4. Operación peek: Mostramos el elemento en el tope de la pila sin removerlo.
  5. Operación pop: Removemos y mostramos los dos elementos en el tope de la pila.
  6. Operación isEmpty: Verificamos si la pila está vacía.
  7. 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

  1. Creación de la Pila: Creamos una pila para almacenar caracteres.
  2. Añadir Caracteres a la Pila: Iteramos sobre cada carácter de la cadena de entrada y lo añadimos a la pila.
  3. 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

Módulo 2: Flujo de Control

Módulo 3: Programación Orientada a Objetos

Módulo 4: Programación Orientada a Objetos Avanzada

Módulo 5: Estructuras de Datos y Colecciones

Módulo 6: Manejo de Excepciones

Módulo 7: Entrada/Salida de Archivos

Módulo 8: Multihilo y Concurrencia

Módulo 9: Redes

Módulo 10: Temas Avanzados

Módulo 11: Frameworks y Librerías de Java

Módulo 12: Construcción de Aplicaciones del Mundo Real

© Copyright 2024. Todos los derechos reservados