You are on page 1of 22

TDA PILA

ESTRUCTURAS DE DATOS

LA PILA: UN TDA SIMPLE


Uno de los conceptos mas tiles en computacin es la pila o stack Es un conjunto de elementos, en la que:
Los elementos se a aden ! se "emue#en po" un solo e$t"emo Este e$t"emo es llamado %tope& de la pila

Ejemplo:
Cuando un empleado se #a de #acaciones, le lle'a co""eo a su esc"ito"io ! las ca"tas se #an %apilando&( Al "e'"esa" de #acaciones, la ultima ca"'a en lle'a", se"a la p"ime"a que "e#isa"a Al te"mina" de "e#isa"la, la nue#a ca"ta del tope de la pila )a*"+ cam*iado La m+s "eciente de la pila, se"a la si'uiente en se" "e#isada

La ultima en llegar, sera la primera en salir: LIFO

TDA PILA: DEFINICION

Dada una ,ila llamada S


-.u/ datos se"ian impo"tantes conoce" so*"e la ,ila0 -1 que ope"aciones pod"2amos e3ectua" a la misma0

Push(S,elemento3) Push(s,elemento1) Push(s,elemento2) Pop(S)

Usemos el ejemplo del co""eo: Al acumula"se, Cada ca"ta5elemento6, e"a %metida& a la pila: push(s,elemento) La ope"acin pus) aumenta un elemento a la pila, ! esta aumenta en su tama o

Tope o Cima

Elemento 3 Elemento 2 Elemento 1

Esta a!ia"

Si

Al "e#isa" c4ca"ta, se la %saca*a& de la pila elemento = pop(s) La ope"acin pop "emue#e el elemento Tope de la pila ! lo "eto"na( La pila disminu!e su tama o
3

PILA: OPERACIONES
InicializarPila(Pila) E#e!to: re!i$e una pila % la ini!iali/a para su tra$a0o normal EliminarPila(Pila) E#e!to: re!i$e una pila % la li$era !ompletamente EstaVacia(Pila) retorna &' (oolean E#e!to: )e*uel*e true si esta *a!ia % #alse en !aso !ontrario Pop(Pila) retorna &' elemento E#e!to: -e!i$e la pila, remue*e el elemento tope % lo retorna E.!ep!ion: Si la pila esta *a!ia, pro,u!e error Push(pila, elemento) E#e!to: Toma la pila % aumenta su tama+o, ponien,o el elemento en la !ima ,e la pila TopePila(Pila) retorna &' elemento E#e!to: )e*uel*e el elemento !ima ,e la pila E.!ep!ion: Si la pila esta *a!ia pro,u!e error 4

TDA PILA: DEFINICION FORMAL

En conclusin:

La pila es un conjunto de elementos De los cuales solo cono7co ! puedo #e" el TO,E ,uede contene" in3o"macin de cualquie" tipo, es deci", es 'en/"ico <pila> ::= <tope> + {<nodo>} <tope> ::= <enlace> <enlace> ::= (ReferenciaNodo | NULL) <nodo> ::= <contenido> + <enlace> <contenido> ::= <<dato>>{<<dato>>}
5

Cada elemento en la pila

OTRAS OPERACIONES

Al "emo#e" el ultimo elemento de una pila esta queda #ac2a

Una #e7 #ac2a, no se pueden %saca"& mas elementos de la pila De*emos sa*e" si la pila Esta Vaca?: EstaVacia(s) De*e"2amos pode" %"e#isa"& el elemento tope de la pila: TopePila(s) Si la pila esta #ac2a, no de*e e$isti" un #alo" tope

Antes de saca" un elemento de la pila

El tope de la pila siemp"e esta cam*iando


El t"ata" de "emo#e" elementos o accede" a elementos de una pila #ac2a se llama

SUBDESBORDAMIENTO de la pila

TDA PILA: IMPLEMENTACION


8a! #a"ias 3o"mas, analicemos la mas sencilla

La ,ila es una Lista9 pe"o limitada


En la lista los nue#os nodos se pueden inse"ta" ! "emo#e"

Al/Del Inicio, al final, dada una posicin, etc.

En la ,ila los elementos solo se pueden inse ta al !inal de la lista 1 solo se pueden e"o#e del $inal de la lista Est+tica o Din+mica :os si"#en pe"3ectamente pa"a la ,ila
!

Las implementaciones de la LSE


IMPLEMENTACION ESTATICA

Tope ; 89:2ELE8&1

La ,ila se"ia una a""e'lo

!lass Pila 1 no,o m%2pila345 Int tope56666667

8 EL E2 :9 8

Tope ; < Tope ; &1

1 solo de*e"emos implementa" las ope"aciones de


,us), llamando a ;nse"ta":odo<inal ,op, llamando a Saca":odo<inal Tope,ila, llamando a Consulta"Ultimo 9 es deci", cada ope"acin de la pila esconde dent"o
Las operaciones de la Lista Contigua

"

Y LAS OPERACIONES?

,ila=>acia
pu$li! $ool Esta a!ia()1

$,ila=C"ea"
pu$li! =Pila(int ma.) 1

-eturn( m%2pila6tope;;&1)5 7 ma.)5

>o,e m%2pila;ne? 9rra%(int tope;&15 76666666 7

Tope
pu$li! no,o Tope()1 I# tope ' &15 -eturn( m%2pila3tope4)5 else return(>@LL)5 7

OPERACIONES BASICAS DE LA PILA

,us)

,op

;nse"ta un elemento en la pila, cuando se puede( Este elemento es el nue#o tope El tope aumenta

Remue#e el elemento tope de la pila, ! lo de#uel#e(

pu$li! *oi, Push(no,o elemento) 1 I# tope A m%2pila6length()&151 tope;topeB15 m%2pila3tope4;elemento5 7 7

Si la pila esta #ac2a, no se puede saca" nada pu$li! no,o Pop()1

I# Pila a!ia() return(>@LL)5 else1 >o,o temp;m%2pila3tope45 tope;tope&15 -eturn (temp)57 7

%&

IMPLEMENTACION DINAMICA
Una pila, o una cola, las dos son Listas "ealmente
Listas en las cuales las ope"aciones en ;nse"ta" ! Remo#e" est+n

limitadas

Una pila, se implemente e$actamente i'ual que una Lista


Al )ace" ,op, es Saca":odo<inal Al )ace" ,us), es ;nse"ta":odo<inal

%%

Stack
La li*"e"ia implementa un TDA pila que se *asa en

LSE(

t!pede3 List Stack? Stack @ stack:eA56? stack;sEmpt!5Stack @S6? stack,us)5Stack @S, :odeList @nue#o6? :odeList @stack,op5Stack @S6? :odeList @stack,eek5Stack @S6?
%2

EJERCICIO EN CLASE

Las pilas se usan pa"a

Recupe"a" un conjunto de elementos en o den in#e so a como se int"oduje"on Lee" una secuencia de elementos ente"os Lue'o most"a"los en o"den in#e"so al in'"esado Si se in'"esa: B, C, D, E Se most"a"a: E, D, C, B

Un p"o'"ama de*e

Ejemplo:

%3

ANALISIS

Cada elemento in'"esado puede se" %metido& en la pila Ejemplo: Una #e7 llenada la pila, Solo )a! que %saca"&, elemento t"as elemento D C 3 1 D 8asta que la pila quede C #ac2a 3
1

%4

SOLUCION
(egin1 Pila S ; ne? Sta!E()5 Int ,ato5 ?hile(T-@E)1 ?rite(FIngrese elemento:G)5 rea,(,ato) i#(,ato ;; !entinela) $reaE5 S6Push(,ato)5 7 ?hile(HS6empt%(S))1 ?rite(S6Pop())5 7 7
%5

UN APLICACIN MAS PRACTICA

El compilado" siemp"e sa*e cuando se )a esc"ito un pa"/ntesis, o una lla#e de mas

Como lo hace? (a%&)) ((a%&) ' c ( )'*+,) Mal O-

Con el uso de pilas, e$p"esiones esc"itas:


Se puede "econoce" los pa"/ntesis que no coinciden

Como lograr esta aplicacin de la pila?

ANALISIS DEL PROBLEMA


7 - ((X* ((X !)"(#-3))

!) " ($-2%&))

Cuando los pa"/ntesis coinciden:


Al 3inal de la e$p"esin

Total parntesis i ! " Total parntesis der #

En todo momento, en cualquie" punto de la e$p"esin


Cada parntesis der. esta precedido de uno i ! Acum. parntesis der. siempre es $" !ue Acum. parntesis i !

,o" ejemplo:

(9B()) B 3
En este punto ,e la e.presiIn, %a se sa$e Jue es in!orre!ta 9!um ( ; 1 9!um ) ; 2 >o se !umple la regla

9l #inal ,e la e.presiIn: Total ( ; 1 Total ) ; 2

%!

PRIMER ENFO UE
valida = true;

,odemos lle#a" un conteo de parntesis Este de*e"2a lle#a" totales de 6 ! de 5 Si en al'n momento, al "e#isa" la e$p"esin, la di3e"encia conteo de pa"/ntesis es ne'ati#o )a! un e""o"( Si al 3inal no coinciden los #alo"es tam*i/n e""o"(

while(no hayamos revisado toda la expresion) { if (elemento_actual == () Total_der++; else if(elemento_actual == )) Total_i !++; if(Total_der " Total_i !){ valida = false; #rea$; % % if (Total_der &= Total_i !) valida = false;

%"

UN ENFO UE MAS NATURAL


Ot"a 3o"ma, es la %3o"ma natu"al& Cuando "e#isamos una e$p"esin de este tipo:

Re#isamos los pa"/ntesis de la de"ec)a, ! *uscamos si tienen %matc)& en la i7quie"da D & ((:L ((:BM)N(O&3)) B M) N (P&26C))
La Pila se utili/a 0ustamente para Fre!or,arG ,e la #orma a$a0o in,i!a,a

,a"a se'ui" este en3oque pod"2amos:

%Reco"da"& los pa"entesis de la i7quie"da ( a medida que apa"ecen:


El p"ime"o en apa"ece", se"+ el ultimo en se" %"eco"dado& El ultimo en apa"ece", se"+ el p"ime"o en se" %"eco"dado&

As2, cuando apa"ece un )


El p"ime" 5 "eco"dado, de*e se" su %matc)& En ese momento, este p"ime"o "eco"dado, !a puede se" %ol#idado& Al lle'a" al 3inal de la e$p"esin, nin'n ( de*e"2a se" %"eco"dado&

Pop el parKntesis ) en!ontra,o

%#

Y A!ORA" EL AL#ORITMO
stac$ ' = stac$(ew(); )*'e declara una pila s+ para almacenar los ( *) while(no hayamos leido toda la cadena) { ))tomar el si,uiente sim#olo de la expresion if(sim#olo = () )*-lmacenarlo*) stac$.ush('+sim#olo); if(sim#olo = )){ )*/uscar match*) if(stac$0s1mpty(')) { )*(o hu#o match&&*) return(2-3'1) x=stac$.op('); % % if(stac$0s1mpty()) return T451; else return 2-3'1; )*-l,un sim#olo se !uedo dentro+

2&

APLICANDO PILAS

>eamos, "e#isemos justo la e$p"esin ante"io"

! ' ( ( ( )( ( (+*) + ( , ' 3) ) +*) + ( 4' 2) )

( ( ( (

To,os los ), en!ontraron su (

2%

Y A!ORA" EL AL#ORITMO
stac$ ' = stac$(ew(); )*'e declara una pila s+ para almacenar los ( *) while(no hayamos leido toda la cadena) { ))tomar el si,uiente sim#olo de la expresion if(sim#olo = () )*-lmacenarlo*) stac$.ush('+sim#olo); if(sim#olo = )){ )*/uscar match*) if(stac$0s1mpty(')) { )*(o hu#o match&&*) return(2-3'1) x=stac$.op('); % % if(stac$0s1mpty()) return T451; else return 2-3'1; )*-l,un sim#olo se !uedo dentro+

22

You might also like