En una matriz, es posible utilizar sus propias funciones para manipular elementos en cualquier posición de la lista. Sin embargo, hay situaciones (veremos ejemplos más adelante) donde es deseable un mayor control sobre las operaciones que se pueden realizar en la estructura. Aquí es donde entra en juego la implementación de estructuras de datos como la pila (stack) y la cola (queue).
La pila es una estructura de datos que, al igual que la matriz, es similar a una lista. El paradigma principal detrás de la pila es LIFO - Last In, First Out, o "el último en entrar es el primero en salir", en traducción libre.
Para comprender mejor lo que esto significa, piense en una pila de libros o platos. Al apilar libros, por ejemplo, el primer libro que se quita de la pila es necesariamente el último que se coloca; si tratamos de quitar el último libro de la pila, todo se derrumbará. Es decir, el último libro que se apila es el primero que se retira.
Abstrayendo este principio al código, resulta que solo hay dos métodos posibles para manipular los datos en una pila:
- insertar un elemento en la parte superior de la pila
- eliminar un elemento de la parte superior de la pila.
A diferencia de la matriz, los lenguajes de programación generalmente no tienen métodos nativos para crear y manipular pilas. Sin embargo, es posible usar métodos de matriz para implementar pilas.
Usos
El caso de uso más famoso de la pila es la call stacks o pila de llamadas de un programa que se está ejecutando: el orden de ejecución de los procesos "llamados" por un programa a través de funciones o métodos obedece al principio de la pila.
Otro recurso que usamos todos los días y que usa pilas para funcionar es el mecanismo de “atrás” y “adelante” de las páginas del navegador (generalmente representado por flechas hacia la izquierda y hacia la derecha). Las direcciones visitadas se siguen acumulando; cuando llamamos a la función de "retorno", la última dirección visitada, es decir, la que está en la parte superior de la pila, es el primero que se muestra.