¿Que es una pila?
Comúnmente llamada stack en el idioma ingles, son estructuras de datos muy utilizadas en programación, su concepto es simple, siguen el esquema "ultimo en entrar primero en salir" (LIFO, por sus siglas en inglés); algunas veces parecieran invisibles sin embargo siempre están ahí formando parte de un algoritmo mas grande quedando ocultas para los usuarios.
Una forma muy común de ver a una pila es realizando una analogía con una torre de aros, en donde los elementos son extraídos por el orden donde entraron.
Operaciones en una pila
Las principales operaciones de una pila son la creación, destrucción, inserción y extracción, así como indicar su capacidad si esta llena o vacía.
En las pilas las operaciones tienen nombres comunes para las funciones:
- New (Crea una nueva pila)
- Destroy (Destruye la pila)
- Push (Agrega un elemento al tope de la pila)
- Pop (Extrae el elemento al tope de la pila)
- Peek (Observa un elemento al tope de la pila sin extraerlo)
- Len (Arroja la cantidad de elementos en la pila )
- Capacity (Arroja la capacidad de la pila)
- IsEmpty ( Indica True o False si la pila esta vacía )
- IsFull (Indica si la pila esta llena ).
- MakeEmpty (Vacía la pila )
Programación.
Las dos formas mas común de programa una pila es por medio de arreglos o listas, cada una tiene sus ventajas y desventajas.
Implementación con Arreglos.
Ventajas:
- El acceso a los elementos de una pila es rápido, solo es necesario el índice y es posible acceder desde cualquier posición.
- La implementación con arreglos es relativamente mas sencilla que con listas
- El uso de memoria es mas eficiente cuando de ante mano se sabe los elementos que tendrá la pila.
Desventajas:
- Para crear la pila se necesita indicar forzosamente la capacitad; ya que al ser implementada con arreglos, el tamaño es fijo.
- Si el espacio asignado a la pila es demasiado grande pude existir desperdicios en memoria.
- Si la pila crece mas allá de su espacio asignado, se necesita una reasignación de memoria y copia de los elementos, lo cual puede ser costoso en términos de tiempo.
Implementación con Listas.
Ventajas:
- Es posible tener una pila dinámica, es decir, pueden crecer o disminuir su tamaño según la aplicación lo requiera.
- El uso ene memoria es mas eficiente en casos donde no sabes la cantidad de elementos que debemos agregar.
Desventajas:
- El acceso a los elementos de una pila implementado con listas es lento sobre todo cundo se tienen muchos elementos, ya que se necesita recorrer la lista desde el principio para acceder a un elemento específico.
- Es necesario hacer uso de punteros , lo que puede hacer complejo el código.
- Se puede presentar fragmentación de memoria conforme se agregan y eliminan elementos.
¿Qué es mejor implementación con listas o arreglos ?
Todo depende del tipo de problema, como ingenieros se debe buscar no solo la solución a un problema, también se busca que esta solución sea eficiente, si sabemos la cantidad elementos la recomendación es usar arreglos, pero si no sabemos los elementos que tendrá nuestra pila lo recomendable es listas.