Professional Documents
Culture Documents
EL TDA PILA
7.1. Definicin
7.2. Operaciones del TDA PILA
7.3. Implementaciones ms usuales: vectores y
listas enlazadas
7.4. Utilidades de las Pilas
Bibliografa
Weiss
Cair y Guardati
Aho, Hopcroft y Ullman
7.1. Definicin
Las pilas son estructuras que permiten almacenar elementos, con la
particularidad de que todas las inserciones y borrados se hacen por el
punto denominado tope de la pila.
Los tipos de dato PILA son equivalentes a las pilas de platos, discos,
etc. que vemos a diario.
La memoria de los programas, dentro de un ordenador, se almacenan
siguiendo la forma de una PILA.
Tope de la pila C
B
A
1
Las tres operaciones elementales son: push, pop y tope, son muy
sencillas. No obstante, son muy tiles en programacin:
Permiten simplificar algoritmos complejos.
Permiten accesos muy rpidos (los algoritmos que los usan no
pierden tiempo en los accesos).
Tope de la X = C y Tope de la
pila
C pila D
Tope de la
B pila B B
+ Pop(P,X)
A A + Push(P,D) A
Tope de la X = D y Tope D
pila
D
B B
+ Tope(P,X) A
A
2
Push (P: Pila, x: ELEMENTO, resp: lgico)
{P: parmetro dato-resultado; se modifica el tope de la pila.
x: parmetro dato, dato a introducir en el tope de la pila,
resp: parmetro resultado, cierto/falso si la operacin pudo o no realizarse}
Pop (P: Pila, x: ELEMENTO, resp: lgico)
{P: parmetro dato-resultado; se modifica el tope de la pila.
x: parmetro resultado, dato que ocupa el tope de la pila,
resp: parmetro resultado, cierto/falso si la operacin pudo o no realizarse}
Tope (P: Pila, x: ELEMENTO, resp: lgico)
{P: parmetro dato; no se modifica el tope de la pila.
x: parmetro resultado, dato que ocupa el tope de la pila,
resp: parmetro resultado, cierto/falso si la operacin pudo o no realizarse}
struct t_pila {
int tope;
ELEMENTO datos [MAXIMO];
}
typedef struct t_pila PILA;
3
Cabeceras en C de las operaciones del TDA Pila
LOGICO crear_pila (PILA *P)
LOGICO borrar_pila (PILA *P)
LOGICO vaca? (PILA P)
LOGICO llena? (PILA P)
LOGICO push (PILA *P, T x)
LOGICO tope (PILA P, T *x)
LOGICO pop (PILA *P, T *x)
4
{Nec: Una pila y un elemento.
Prod.: Pone el elemento en el tope de la pila.}
Algoritmo Push (P, x, resp) es
P: Pila; {par. dato-resultado}
x: ELEMENTO; {p. dato}
resp: lgico; {p. resultado}
tmp: posicin; {variable local}
Inicio
llena? (P, resp);
si resp = cierto entonces {La pila est llena. No se puede insertar}
resp:= falso; Escribir "Pila llena";
sino obtener (tmp);
tmp.info := x;
tmp.sgte := P.prim; {puede ser nil}
P.prim := tmp;
P.longitud := P.longitud + 1;
resp := cierto;
finsi
Fin
5
{Nec: Una pila.
Prod.: El elemento que ocupa el tope de la pila}
Algoritmo Tope (P, x, resp) es
P: Pila; {p. dato}
x: ELEMENTO; {parmetro resultado}
resp: lgico; {p. resultado}
Inicio
vaca? (P, resp);
si resp = cierto entonces {La pila est vaca}
resp := falso;
Escribir "Pila vaca";
sino {Hay al menos un elemento}
x := P.prim.info;
resp:=cierto;
finsi
Fin