Pilas

5.
P
I
L
A
S

## Introducción.

En la presente investigación referente al tema de PILAS (Stacks), se definen estas como estructuras de datos que, el modo de acceso es llamado “LIFO”.
Las pilas tienen una característica principal, permite almacenar y recuperar datos; preferentemente, son usadas por su simplicidad y la forma de ordenación, además de evitar la asignación del tamaño desde un principio.
Se mostrarán las operaciones básicas que manipulan los datos, y las auxiliares que indican existencia o inexistencia de elementos dentro de las pilas.
Se exaltarán las operaciones adicionales, como lo son Peek (también llamada operación superior), Duplicate, entre otras.
Estas operaciones modifican a los elementos existentes en el interior de la pila.
Para analizar a las pilas, se encontrarán las partes en las que se compone una pila, sus operaciones, utilidades, y su función específica de acuerdo a un ejemplo acordado.
El interés para los programadores, en definitiva, es el hecho de conocer una forma más ergonómica y apropiada para conseguir el almacenamiento y la recuperación de datos utilizados en alguna base de datos y/o programas.
Académicamente, nos permitirá encontrar la manera más apta para la organización de reconocedores sintácticos de lenguajes independientes.
Ulteriormente, se ejemplificará para facilitar el entendimiento y comprensión de lo que es una PILA (Stack).

## Resumen.

Como nos han relatado varios autores una pila (Stack en inglés) es una estructura de datos en la que el modo de acceso a sus elementos es de tipo LIFO (del inglés Last In First Out, último en entrar, primero en salir) que permite almacenar y recuperar datos.
Para el manejo de los datos se cuenta con dos operaciones básicas: apilar (push), que coloca un objeto en la pila, y su operación inversa, retirar (o desapilar, pop), que retira el último elemento apilado.
En cada momento sólo se tiene acceso a la parte superior de la pila, es decir, al último objeto apilado (denominado TOS, Top of Stack en inglés). La operación retirar permite la obtención de este elemento, que es retirado de la pila permitiendo el acceso al siguiente (apilado con anterioridad), que pasa a ser el nuevo TOS. A este tipo de operaciones le llamamos Operaciones Básicas.
Aunque también existen las Operaciones auxiliares las cuales son: pila llena y pila vacía. La Pila llena nos indica si la Pila contiene o no contiene elementos. Por el contrario, la Pila vacía indica si es posible o no agregar nuevos elementos.
Si nos ponemos de lleno a investigar podremos encontrar que cada pila tiene una ubicación fija en la memoria en la que comienza. A medida que se añaden elementos de datos a la pila, el puntero de pila se desplaza para indicar la extensión actual de la pila, que se expande lejos del origen. Los apuntadores de pila pueden apuntar al origen de una pila o a un rango limitado de direcciones, ya sea por encima o por debajo del origen. Sin embargo, el puntero de pila no puede cruzar el origen de la pila. Hasta el momento toda esta información la podemos encontrar investigando en libros o internet para adquirir un mayor conocimiento acerca del tema.

## Desarrollo Tematico.

### ¿Qué es una Pila Informática?

Una pila (stack) es una estructura de datos, que consta de una serie de datos, en la cual las inserciones y eliminaciones se hacen por un extremo, llamado cima (top), de la pila. La estructura pila se conoce como LIFO (last-in, first-out, último en entrar, primero en salir), que significa “último elemento introducido, primero sacado” (Paszniuk, Rodrigo, 2013).
Una pila es un área de memoria de ordenador con un origen fijo y tamaño variable (Camacaro, E. 2012).

### Antecedentes

El método de pila para la evaluación de expresiones fue propuesto en 1955 y dos años después patentado por Fiedrich L.Bauer, quien recibió en 1988 el premio "IEEE Computer Society Pioneer Award" por su trabajo en el desarrollo de dicha estructura de datos.

### Características de las pilas.

Implementación.
Una pila se puede implementar a través de una matriz o una lista vinculada. Las matrices son rápidas, pero limitadas en tamaño y una lista enlazada requiere sobrecarga para asignar, vincular, desvincular y desasignar, pero no está limitada en tamaño.
• Una pila implementada usando listas enlazadas puede trabajar para un número ilimitado de valores.
• A diferencia de una matriz, con una lista enlazada, no hay necesidad de fijar un tamaño al principio de la implementación.
• La pila implementada mediante lista enlazada puede organizar tantos valores de datos como queramos.
• También conocidas por su nombre alternativo de “LIFO”.
• Se visualizan creciendo desde abajo hacia arriba o a menudo visualizadas de izquierda a derecha. Lo que identifica la estructura de datos como una pila, no es la implementación, sino la interfaz: el usuario sólo puede trabajar con un extremo de la pila, sea agregando y removiendo datos.

### Arquitectura básica de una pila.

Una pila es un área de memoria de ordenador con un origen fijo y tamaño variable. Inicialmente el tamaño de la pila es cero. Un puntero de pila, generalmente en forma de un registro de hardware, apunta a la ubicación más recientemente referenciada en la pila. Cuando la pila tiene un tamaño de cero, el puntero de pila apunta al origen de la pila (Monsalve Andrés, Fernández José, UPEL-IPB, 2012).

### ¿Cómo funciona una Pila informática?

Cada pila tiene una ubicación fija en la memoria en la que comienza. un puntero de pila, por lo general en forma de un registro de hardware, apunta a la más reciente localización en la pila; cuando la pila tiene un tamaño de cero, el puntero de pila de puntos en el origen de la pila.
Como se añaden las nuevas placas, cada nueva placa se convierte en la parte superior de la pila, escondidos debajo de cada plato, empujando a la pila de placas. A medida que la placa superior se elimina de la pila, la segunda placa se convierte en la parte superior de la pila.
Los punteros de pila pueden apuntar al origen de una pila o de un número limitado de direcciones, ya sea por encima o por debajo del origen (dependiendo de la dirección en que crece la pila), sin embargo, el puntero de pila no puede cruzar el origen de la pila. En otras palabras, si el origen de la pila está en la dirección 1000 y la pila crece hacia abajo (hacia las direcciones 999, 998, y así sucesivamente), el puntero de pila nunca debe ser incrementado más allá de 1000 (para 1001, 1002, etc.), (Monsalve Andrés, Fernández José, UPEL-IPB, 2012).

### Operaciones Básicas de las Pilas

La definición de una estructura de datos queda completa al incluir las operaciones que pueden realizar en ella. Para el caso de las pilas, las operaciones básicas que se puede llevar a cabo son:
• Insertar un elemento -Push- en la pila
• Eliminar un elemento -Pop- de la pila

### Insertar (Push)

Para insertar en una pila se realiza en su cima, considerando la cima como el último elemento insertado. Esta es una de las particularidades de las pilas, mientras el resto de estructuras de datos lineales se representan gráficamente en horizontal, las pilas se representan verticalmente. Por esta razón es por lo que se habla de cima de la pila y no de cola de la cima.
Las operaciones necesarias para poder lograr insertar en la pila son muy simples, hacer que el nuevo nodo apunte a la cima anterior, y definir el nuevo nodo como cima de la pila (Sama Sergio ,2011).

### Algoritmo para una operación Push.

1. Revisar si la pila está llena o no.
2. Si la pila está llena, entonces imprime error de desbordamiento y salir del programa.
3. Si la pila no está llena, entonces incrementa la parte superior y añade elementos.

### Borrar (Pop)

Esta operación es totalmente lo contrario a Insertar (Push).
Cuando se elimina un elemento de la pila, el elemento que se borra es el elemento situado en la cima de la pila, el que menos tiempo lleva en la estructura.
Las operaciones para realizar son muy simples, avanzar el puntero que apunta a la cima y extraer la cima anterior (Sama Sergio ,2011).

### Algoritmo para la operación POP.

1. Compruebe si la pila está vacía o no.
2. Si la pila está vacía, imprima el error de flujo inferior y salga del programa.
3. Si la pila no está vacía, imprime el elemento de arriba y reduzca la parte superior.

### ¿Qué es una PILA LLENA y una PILA VACÍA? (Operaciones Auxiliares)

• Pila llena
Indica si la Pila contiene o no contiene elementos. Es decir, la operación fundamental hace una comprobación de la existencia de elementos dentro de la pila.
• Pila vacía
Indica si es posible o no agregar nuevos elementos. Es decir, la operación fundamental verifica la capacidad disponible de la pila.
Aunque también están:
• Size (): Regresa el tope de la pila.
• Vaciar (): Elimina todos los elementos de la pila. (SIMBAÑA Geovanny ,2010)

### Operaciones Adicionales en una Pila Informática

En algunas pilas se pueden ocupar operaciones adicionales:
• Duplicate: Coloca un elemento y se empuja de nuevo.
• Peek: Se inspecciona el elemento superior (o se devuelve), pero ni el puntero de la pila y el tamaño de la pila cambian. (También llamada: operación superior).
• Swap or exchange: Los dos elementos más altos de la pila cambian de lugar.
• Roll or rotate: Los “n” ítems más altos se mueven en la pila de forma rotativa.
Por ejemplo, si n = 3, los elementos 1, 2 y 3 de la pila se mueven a las posiciones 2, 3 y 1 de la pila, respectivamente (Horowitz, Ellis, 1984).

### ¿Para qué sirven las Pilas?

La utilidad de esto, ejemplificando en la programación que ya hemos visto, es el recorrido de árboles por niveles.
Las pilas permiten almacenar y recuperar los datos que, nosotros como programadores, insertemos en estas. Un extra para las pilas es que usa los datos, y los organiza para una recuperación más ergonómica. (Sama Sergio ,2011).

### Aplicaciones de las Pilas Informática

Las pilas son unas Estructuras de datos muy usadas en la solución de diversos tipos de problemas, en el área de computación, algunos de los casos más representativos son:
• Llamadas a Sub-Programas
• Recursividad
• Tratamiento de Expresiones aritméticas
• Ordenación.

## Programas de Pilas en C# y NetBeans

### PROGRAMA EN C#

### PROGRAMA DE PILAS EN NETBEANS (JAVA)

## CONCLUSIÓN

Como conclusión del presente trabajo de investigación sobre pilas como estructuras de datos, es importante mencionar es una lista ordenada o estructura de datos en la que el modo de acceso a sus elementos es de tipo LIFO (del inglés Last In First Out, último en entrar, primero en salir) que permite almacenar y recuperar datos. Esta estructura se aplica en multitud de ocasiones en el área de informática debido a su simplicidad y ordenación implícita de la propia estructura. Para el manejo de los datos se cuenta con dos operaciones básicas: apilar (push), que coloca un objeto en la pila, y su operación inversa, retirar (o desapilar, pop), que retira el último elemento apilado.

## REFERENCIAS BIBLIOGRAFICAS

• E. Horowitz, S. Sahni. (1983). Fundamentals of data structures. Michigan. Estados Unidos. Computer Science Press.
• Mr. Rajinikanth B. (2013). BTech Smart Class.
• Joyanes Aguilar. (2010). Programación en C, C++,Java. México: McGraw Hill.
• Hernández, Z.J. y otros (2005): Fundamentos de Estructuras de Datos. Soluciones en Ada, Java y C++, Thomson.
• Weiss, M.A. (2014). Data Structures and Algorithm Analysis in C++, 4th Edition, Pearson/Addison Wesley.

## REFERENCIAS ELECTRONICAS

• http://btechsmartclass.com/DS/U2_T3.html
• http://godieboy.com/2009/10/pilas-estructura-de-datos.html
• https://es.slideshare.net/geova666/estructura-de-datos-i-pilas
• https://en.m.wikipedia.org/wiki/Stack_(abstract_data_type)
• https://www.programacion.com.py/escritorio/c/pilas-en-c

## REFERENCIAS COMPLEMENTARIAS

• https://www.programacion.com.py/escritorio/c/pilas-en-c
• https://es.slideshare.net/jochibryant/estructura-de-datos-lista-pilas-y-colas
• http://aniei.org.mx/paginas/uam/Descargas/Recursos/Tema_Pilas.pdf

## COMPLEMENTOS

Estructuras de Datos – 9. Pilas en C (COMPLETO)