|
La
pila es una versión restringida de una lista enlazada.
A una pila se le pueden añadir y retirar nuevos nodos únicamente
de su parte superior. Por esta razón, se conoce una pila
como una estructura de datos como últimas entradas, primeras
salidas (LIFO por last-in, first-out). Se referencia una
pila mediante un apuntador al elemento superior de la misma. El
miembro de enlace en el último nodo de la pila se define
a NULL, para indicar que se trata de la parte infereior de
la pila misma.
La
diferencia entre una pila y una lista enlazada es que en una lista
enlazada, las inserciones y borrados pueden ocurrir en cualquier
parte, pero en una pila únicamente en su parte superior.
Las
funciones primarias para manipular una pila son push y pop.La
función push crea un nuevo nodo y lo coloca en la parte superior
de la pila. La función push está formada de
tres pasos:
- Crear
un nuevo nodo llamando a malloc, asignando la posición
de la memoria asignada a newPtr, asignando el *topPtr
valor a colocarse en la pila a newptr->data, y
asignar NULL a newPtr-nextPtr.
- Asignar
*topPtr (el apuntador a la parte superior de la pila) a
newPtr->nextPtr, el miembro de enlace de newPtr
ahora apunta al nodo superior anterior.
- Asigna
newPtr a *topPtr ,apunta ahora a la nueva parte
superior de la pila.
La función pop elemina un nodo de la parte superior
de la pila, liberando la memoria que fue asignada al nodo retirado,
y regresando el valor retirado.Consiste en 5 pasos:
- Asigna topPtr a tempPtr
(tempPtr se utilizará para liberar la memoria no necesaria).
- Asigna (*topPtr)->data a
popValue (guarda el valor almacenado en el nodo superior).
- asigna (*topPtr)->nextPtr a
*topPtr ( asigna *topPtr la dirección del nodo superior).
- Libera la memoria a la cual apunta tempPtr.
- Regresa popValue al llamador (main).
Las
pilas son utilizadas por los compiladores en el proceso de evaluar
expresiones y generar código de lenguaje máquina.
|
|
|