Vous êtes sur la page 1sur 20

UNIDAD III

PILAS
DEFINICION
Una pila es una lista de elementos a la cual se
puede insertar o eliminar elementos solo por uno
de los extremos, en consecuencia los elementos
de una pila seran eliminados en orden inverso al
que se insertaron, es decir el ultimo elemento en
insertar es el primero en salir.
Ejemplo, una pila de platos, pila de latas, etc

A esta estructura se le conoce como LIFO

(last-in first out)


Esta estructura pertenece de datos lineales , ya
que los componentes ocupan lugares sucesivos
en la estructura
REPRESENTACION DE PILAS
Estas estructuras no estn definidas en un lenguaje de
programacin, pero se pueden implementar mediante:
Arreglos
Listas enlazadas

PILA
PILA
MAX
TOPE
.
. MAX
. 1 2 3 4

TOPE 4 444
111 222 333 444

.
.
.
3 333

2 222
1 111
ESTADOS DE LAS PILAS
PILA PILA PILA
MAX 9999 MAX MAX
. . .
. . .
. . .

4 444 4 444 4

3 333 3 333 3
2 222 2 222 2
1 111 1 111 1

PILA LLENA PILA CON ALGUNOS TOPE=0


ELEMENTOS PILA VACIA
CUANDO SE DESEA INSERTAR UN ELEMENTO DENTRO DE UN PILA LLENA, SE DICE
QUE HA OCURRIDO UN DESBORDAMIENTO (OVERFLOW), Y EL ESPACIO DE MEMORIA
NO SE PUEDE MODIFICAR. SI TRATA DE ELIMINAR UN ELEMENTO DENTRO DE UNA
PILA VACIA OCURRE UN SUBDESBORDAMIENTO (UNDERFLOW)
RESOLVIENDO EL PROBLEMA DE
ESPACIO
UNA ALTERNATIVA A ESTE PROB LEMA ES
USAR ESPACIOS COMPARTIDOS DE LA
MEMORIA PARA LA IMPLEMENTACIN DE
PILAS
PILA 1
PILA 2
.
.
.

.
.
.
1 2 3 4 N-1 N N+1 2N-1 2N

TOPE1 TOPE 2
Si en algn punto la pila1 necesitar ms de n espacio y
existiera espacio en la pila2 o viceversa, se procede a ocupar
el espacio sin caer en un error de desbordamiento
PILA 1 PILA 2

.
.
.

.
.
.
1 2 3 4 N N+1 N+3 2N-1 2N
TOPE1
TOPE 2

PILA 1 PILA 2
.
.
.

.
.
1 2 3 4 N-1 N N+2 . 2N-1 2N

TOPE1 TOPE 2
OPERACIONES CON PILAS

LAS ELEMENTALES SON:


PONER UN ELEMENTO (PUSH).
QUITAR UN ELEMENTO (POP).

Se considera una pila con un mximo (Max)


nmero de elementos y el ultimo indicado
por el puntero Tope. Se describen los
siguientes algoritmos:
PUSH
Pone(pila,max, tope, dato)
1. Si Tope < Max {Existe espacio}
entonces
Tope= Tope +1 {actualiza tope e inserta el nuevo elemento}
pila[tope] =dato
si_no
Escribir Desbordamiento
2 fin_condicional
POP
Quita(pila, max, tope, dato)
1. Si Tope > 0 {la pila esta vacia}
entonces {obtiene el ultimo elemento, la asigna
Dato= Pila[tope] a dato y actualiza tope }
Tope=Tope-1
si_no
Escribir subdesbordamiento
2. fin_condicional
EJEMPLO
Se insertan los elementos en el siguiente
orden: lu, ma, mi, ju, vi, y se elimina vi
PILA PILA PILA

MAX MAX MAX


. . .
. . .
. . .

tope 5 5 5
viernes
4 juves tope 4 jueves 4 jueves

3 mircoles 3 mircoles 3 mircoles


martes martes 2 martes
2 2
1 1 1 lunes
lunes lunes
Si se desea eliminar martes, primero se
debe eliminar jueves y mircoles
APLICACIONES
Llamadas a subprogramas
Recursin

Tratamiento de expresiones
aritmticas
Ordenaciones
Llamadas a subprogramas
Cuando se llaman a
subprogramas internamente se
manejan las pilas para guardar el
estado de las variables del
programa en el momento que se
hace la llamada. As cuando
termina la ejecucin del
subprograma, los valores de la
pila se recuperan para continuar
la ejecucin y desde el punto en
que fue llamado, ejemplo:
PP

UNO DOS

TRES

Llamada a procedimientos
A) E) B) F) C) D)
MAX MAX MAX MAX
. . . .
. . . .
. . . .

5 5 5 5
4 4 4 4

3 3 3 3
2 2 2 tope 2 DOS
tope 1 1 tope 1 1
PP PP PP
Tope=0

A) PP llama al Uno y se guarda en la pila (push)


B) Termina la ejecucin de Uno y regresa el control (pop)
C) PP llama a Dos y se vuelve a guarda en la pila (Push)
D) Dos llama a Tres y se graba en la pila (Push)
E) Al terminar la ejecucin de Tres se realizar un Pop, retornando el control a Dos,
F) posteriormente cuando finalice Dos se regresar el control a PP, terminando la
Ejecucin, y la pila quedar Vaca
RECURSIVIDAD
Nos permite definir un objeto en trminos de
s mismo, por ejemplo en una fotografa de
una fotografa. La recursin se puede
presentar en forma:
A) directa: Es cuando un subprograma se
llama directamente as mismo y se puede
presentar
B) Indirecta: el subprograma llama a otro
subprograma y este a su vez llama al primero
Tipos de recursin

SUBPROGRAMA P
SUBPROGRAMA P

Llamada a Q

SUBPROGRAMA P
LLAMA A P SUBPROGRAMA Q
Llamada a V
Llamada a Q

SUBPROGRAMA V
SUBPROGRAMA Q
Llamada a P
Llamada a P

Recursin directa
Recursin indirecta con 2 subprogramas
Y tres subprogramas

En toda definicin recursiva se debe establecer un ESTADO BASICO, es decir donde


Se presenta de manera directa, y una variable que se acerque paulatinamente
A dicho estado. Si no se caera en un estado circular.
EJEMPLO DEL FACTORIAL DE UN
NUMERO
FACTORIALREC(n)
1. Si n=0
entonces
factorialrec = 1
{estado bsico}

si_no
factorialrec=n* factorialrec(n-1) {llamada recursiva}

Fin_condicional
TRATAMIENTO DE EXPRESIONES
Dada la expresin A+B se dice que es notacin
Infija y se debe a que el operador (+) esta
entre los operandos A y B
Dada la expresin AB+ se dice que es notacin
Postfija, y se debe a que el operador (+) esta
despus de los operandos A y B
Dada la expresin +AB se dice que es notacin
Prefija, y se debe a que el operador (+) esta
antes de los operandos A y B
Ejemplo:
CONVERSION INFIJA-POSTFIJA

(x+Y)*W/T^Y-V
Postfija
(x+y)* W/TY^ -V PASO 1
Xy+*W/TY^-V PASO 2
XY+w*/TY^-V PASO 3
XY+W*TY^/-V PASO 4
XY+W*TY^/V- PASO 5
Ejemplo:
CONVERSION INFIJA-PREFIJA

(x+Y)*W/T^Y-V
PREFIJA
(X+Y)*W/^TY-V PASO 1
+XY*W/^TY-V PASO 2
*+XYW /^TY -V PASO 3
/*+XYW^TY -V PASO 4
-/*+XYW^TY V PASO 5