Una pila (stack) es una colección ordenada de elementos a los que sólo se puede acceder por un único lugar o extremo de la pila. Al primer elemento agregado se lo denomina como "fondo", mientras que al último se lo conoce como "cima". Los elementos de la pila se añaden o se borran de la misma sólo por su parte superior (cima).
Debido a su propiedad específica “último en entrar, primero en salir ” se conoce a las pilas como
estructura de datos LIFO (last-in / first-out).
A continuación se muestra un vídeo explicativo sobre las Pilas en Java:
Una pila se puede implementar de las siguientes formas:
- Guardando los elementos en un arreglo en cuyo caso su dimensión o longitud es fija.
- Utilizando un vector para almacenar los elementos.
- Construir una lista enlazada, cada elemento de la pila forma un nodo de la lista; la lista crece o decrece según se añaden o se extraen, respectivamente, elementos de la pila; ésta es una representación dinámica y no existe limitación en su tamaño excepto la memoria de la computadora.
Operaciones de las Pilas:
Una pila cuenta con 2 operaciones imprescindibles:
Apilar (push): Consiste en añadir un elemento a la pila. En la siguiente imagen se explica de una forma más abstracta en la que se puede ver que se está añadiendo el dato "7" sobre el dato "8", convirtiéndose éste en la "cima" de la pila.
Desapilar (pop): Es la operación contraria de "apilar", es decir, en lugar de añadir elementos a la pila, se los va a quitar de la misma. En la siguiente imagen se explica de una forma más abstracta en la que se puede ver que se está quitando de la pila el dato "7" establecido anteriormente como la "cima".
Después de las dos operaciones fundamentales en una pila, se pueden establecer otras, las cuales servirán para obtener información y manipular su contenido:
CrearPila: Inicia la pila
Pila vacía (Empty): Comprueba si la pila no tiene elementos
Pila llena: Comprueba si la pila está llena de elementos
Limpiar pila: Quita todos sus elementos y deja la pila vacía
CimaPila (Peek): Obtiene el elemento cima de la pila
Tamaño de la pila: Número de elementos máximo que puede contener la pila
Buscar (Search): Busca un elemento determinado que esté dentro de la pila y devuelve su posición.
En resumen...
Una pila es una estructura de datos del tipo LIFO, con dos operaciones imprescindibles: apilar (push) y desapilar (pop), al primer elemento se lo conoce como "fondo" y al último como "cima".
Ejemplo práctico:
A continuación se muestra un programa simple, en donde se aplican las operaciones apilar y desapilar elementos en una Pila. El programa consiste en un arreglo de 10 números (del 9 - 0) enteros que, mediante la funcion "push" agrega los mismos a la pila. Y mediante la función "pop" elimina 5 elementos de la pila. Mostrando únicamente los números del 9 al 5
Clase Pilas:
public class Pilas { private int stck[]; private int tos; //Constructor Pilas(int size) { //Crear la pila stck = new int[size]; tos = -1; } //Introduce valor en la pila void push(int value) { if (tos == stck.length - 1) System.out.println("Stack Overflow!"); //Pila esta llena else stck[++tos] = value; //Almacena valor en pila } //Retira valor de la pila int pop() { if (tos < 0) { //La pila esta vacia System.out.println("Stack Underflow!"); return 0; } else return stck[tos--]; } }Clase Principal:
public class Principal { public static void main(String[] args) { System.out.println("EJERCICIO BÁSICO PILAS EN JAVA"); Pilas pila = new Pilas(10); //Llenar la pila for (int i = 0; i < 10; i++) pila.push(i); //Retirar 5 primeros elementos de la pila System.out.println("Valores contenidos en la pila: "); for (int i = 0; i < 5; i++) System.out.println("\t " + pila.pop()); } }
Captura de pantalla del programa:
Academia. (2015). “Listas, pilas y colas en Java”. Recuperado el 18 de noviembre del 2015 de: http://www.academia.edu/9865829/Listas_pilas_y_colas_en_Java