Computing">
Pilas
Pilas
Pilas
Concepto de Pila:
El término "pila" hace referencia a una estructura organizada de elementos que solo
pueden ser accedidos desde un punto único o extremo, conocido como la parte superior o
cima. En una pila, los elementos se añaden o eliminan exclusivamente desde la parte
superior, siguiendo un patrón similar al apilamiento de platos o libros.
Para una comprensión más profunda, podemos definir una pila como una colección de
datos en la que los elementos se organizan de manera que solo se pueden introducir o
eliminar desde un punto específico llamado "cima". La organización de la pila asegura que
el elemento en la cima sea el primero en ser accesible, seguido por el elemento justo
debajo de él y así sucesivamente. No es necesario que los elementos de la pila sean
comparables mediante el operador "menor que" (<) y pueden pertenecer a cualquier tipo
de dato.
Es importante destacar que los elementos en la pila deben retirarse en el orden contrario
al que fueron agregados originalmente. Por ejemplo, al crear una pila de libros, si primero
colocamos un diccionario, luego una enciclopedia encima de él y finalmente una novela
encima de ambos, la novela será el elemento en la parte superior de la pila y deberá
retirarse en primer lugar.
Al retirar los libros de la pila, es importante seguir un orden específico: primero se quita la
novela, luego la enciclopedia y, finalmente, el diccionario. Esto se debe a una propiedad
particular de las pilas, donde el último elemento agregado es el primero en ser retirado.
Esta característica distingue a las pilas como estructuras de datos LIFO (Last-In, First-
Out).
Las operaciones típicas realizadas en una pila son el "Insertar" (también conocido como
"push"), que agrega un elemento en la parte superior de la pila, y el "Quitar" (o "pop"), que
elimina o extrae un elemento de la pila.
Las características principales de una pila son las siguientes:
Estructura LIFO: Una pila sigue el principio "Last-In, First-Out", lo que significa que el
último elemento en ser insertado (apilado) es el primero en ser retirado (desapilado).
Acceso Limitado: Los elementos de una pila solo pueden ser accedidos desde un único
punto, que se conoce como la cima (top) de la pila. No se pueden acceder elementos en
medio de la pila directamente.
Operaciones Básicas: Las operaciones básicas en una pila son "Insertar" (push) y "Quitar"
(pop). "Push" agrega un elemento en la cima de la pila, mientras que "pop" elimina o saca
el elemento superior de la pila.
Flexibilidad de tipo de datos: Las pilas pueden contener elementos de diferentes tipos de
datos, no están restringidas a un tipo específico.
Estructura de datos eficiente: Las pilas son estructuras de datos eficientes para el manejo
de ciertas tareas, como la reversión de datos o el seguimiento de la historia de acciones
realizadas.
Empty (Vaciar o Verificar si está vacía): Se utiliza para verificar si la pila está
vacía o no. Devuelve un valor booleano que indica si la pila no contiene ningún
elemento.
Size (Tamaño): Esta operación devuelve la cantidad de elementos que hay en la
pila en un momento dado. Ayuda a determinar cuántos elementos están
almacenados en la pila.
APLICACIONES DE PILAS
Validación de paréntesis y etiquetas HTML: Las pilas se utilizan para verificar si los
paréntesis, corchetes y etiquetas HTML están balanceados y bien formados en un
texto. Cada vez que se encuentra un paréntesis de apertura o una etiqueta de
apertura, se agrega a la pila, y cuando se encuentra un paréntesis de cierre o una
etiqueta de cierre, se compara con el elemento superior de la pila para garantizar
que coincidan.
Reversión de cadenas: Una pila puede utilizarse para invertir una cadena de
caracteres. Se puede empujar cada carácter en la pila y luego pop para obtener
los caracteres en orden inverso.
Nodo(T elemento) {
this.elemento = elemento;
}
}
System.out.println("Desapilando elementos:");
while (!pila.isEmpty()) {
System.out.println(pila.pop());
}
// Salida:
// 3
// 2
// 1
}
}
}
1. Se define una clase interna Nodo para representar los elementos individuales de
la pila. Cada nodo contiene un elemento y una referencia al siguiente nodo.
2. La clase PilaEnMemoriaDinamica tiene dos campos: cima para rastrear el nodo
superior de la pila y tamaño para mantener un registro del número de elementos
en la pila.
3. El constructor de la clase inicializa la pila como vacía con cima establecido en null
y tamaño en 0.
4. El método push agrega un nuevo elemento a la pila creando un nuevo nodo,
actualizando la referencia siguiente al nodo actual de la cima y moviendo la cima
de la pila al nuevo nodo.
5. El método pop elimina y devuelve el elemento superior de la pila. Verifica si la pila
está vacía antes de hacerlo.
6. El método peek devuelve el elemento superior de la pila sin eliminarlo.
7. El método isEmpty verifica si la pila está vacía.
8. El método size devuelve el tamaño actual de la pila.
9. En el método main, se crea una instancia de la pila, se agregan elementos, se
muestra el elemento superior y se desapilan los elementos para demostrar el
funcionamiento de la pila en memoria dinámica.
package com.mycompany.practica;
public class Practica {
public class PilaEnMemoriaEstatica<T> {
private Object[] arreglo; // El arreglo para almacenar los elementos de la pila
private int tamaño; // El tamaño actual de la pila
private int capacidad; // La capacidad máxima de la pila