Вы находитесь на странице: 1из 5

Pilha (LIFO) Aula 2

Uma pilha uma coleo ordenada de itens na qual os itens podem ser inseridos e retirados a
partir da ltima posio, chamada topo da pilha. A Figura 1 representa uma estrutura do tipo pilha.
A definio de um TAD ilha indica que apenas tr!s opera"es podem ser reali#adas$
empilhamento, desempilhamento e uma e%entual %erificao do elemento que est& no topo da pilha. A
representao anterior ilustra uma pilha cu'o contedo do topo o elemento E. (este caso, quando um
elemento inserido, ele inserido )so*re+ E. A remoo de um elemento na pilha anterior eliminaria o
elemento E da pilha.
Implementao de Pilha
ode,se criar um TAD pilha utili#ando a representao em arra-. A seguir descrita a
implementao de uma pilha. A definio de uma estrutura para pilha necessita de apenas dois
mem*ros, um campo chamado topo e um campo onde as informa"es so arma#enadas representado
por um arra- chamado dado. . campo topo do tipo inteiro e representa o /ndice do topo na arra-.
Estrutura Pilha{
int topo = -1;
int dado[];
} p;
0nicialmente o /ndice topo iniciali#ado com 11. 0sto indica que a pilha est& %a#ia. Desta forma
pode,se implementar um teste para %erificar se a pilha est& %a#ia 2teste de underflo34 da seguinte
forma$
5e 2topo 66 ,14 ento
retorne pilha %a#ia
seno
retorne pilha no %a#ia
7
8
A
9
D
Figura 1$ :epresentao de uma ilha.
Topo
A operao de insero 2empilhamento4 pode ser facilmente implementada da seguinte forma$
empilha2p, 1;4 << 9mpilha o elemento 1; na pilha p
5e p no est& cheia ento
topo 6 topo =1>
p.dado?topo@ 6 1;
seno
)0nforme ilha 7heia.+
A importante %erificar a reli#ao do teste de )o%erflo3+ antes de efeti%amente inserir o elemento
na pilha. 9ste teste pode ser implementado da seguinte forma$
5e p.topo 66 tamanho de p.dado 1 1 ento
:etorne )pilha cheia+
5eno
:etorne )ilha no 7heia+
A operao de remoo 2desempilhamento4 de um elemento tam*m muito simples$
desempilha2p4 << Desempilha o elemento da ilha p
5e a p no est& %a#ia ento
:etorne p.dado?topo@
topo 6 topo 1 1
5eno
0nforme )ilha est& %a#iaB+
Exemplo 1
Um eCemplo de utili#ao de pilha consiste em a%aliar uma eCpresso aritmtica segundo a
utili#ao dos par!nteses )24+, colchetes )?@+ e cha%es )DE+. . pro*lema consiste em criar uma pilha de
caracteres. . programa rece*e uma sequ!ncia de caracteres que representa uma eCpresso aritmtica
genrica, por eCemplo$ DAF2A=84E. A eCpresso lida caracter a caracter da esquerda para direita.
Guando um caracter de a*ertura encontrado )2+, )?+, ou )D+ esse caracter empilhado. Guando um
caracter de fechamento encontrado )4+,. )@+ou )E+ o elemento do topo da pilha comparado. 5e o
elemento do topo da pilha representa a a*ertura do respecti%o fechamento, ento o elemento
desempilhado. Guando o final da eCpresso o*tido, se a pilha est& %a#ia, ento a eCpresso est&
correta, caso contr&rio a eCpresso est& incorreta 2Figura H4.

D
DAF
D
DAF2
2
D
DAF2A=84 DAF2A=84E
Figura H$ 9Cemplo de Aplicao da ilha na a%aliao de uma eCpresso
Fila (FIFO)
Uma fila uma coleo ordenada de itens na qual itens podem ser retirados pela posio frontal,
chamada primeiro, e elementos podem ser inseridos na ultima posio, chamada ltimo.
ode,se definir uma estrutura para representao de uma fila da seguinte forma$
9strutura FilaD
int dado?@>
int primeiro, ultimo>
E f>
Problemas com a representao de Filas em Array
(a implementao tradicional em arra-, a fila pode estar cheia mesmo apresentando posi"es
li%res>
ode,se utili#ar uma representao circular, mas as condi"es de fila cheia e %a#ia no so
mais %&lidas.
Exerccios
1. Dada uma determinada pilha p de nmeros inteiros inicialmente %a#ia, represente
graficamente as opera"es a seguir$
a4 p.empilha21;4
*4 p.empilha2,H4
c4 p.empilha21I4
d4 p.topo24
e4 p.desempilha24
f4 p.empilha2J;4
g4 p.desempilha24>
h4 p.desempilha24>
i4 p.desempilha24>
'4 p.empilha2KL4>
A 8 7
primeiro
ltimo
J
;
K
1
H
rimeiro 6 ;
Mltimo 6 ,1
A
8
7
J
;
K
1
H
rimeiro 6 ;
Mltimo 6 H 7
J
;
K
1
H
rimeiro 6
Mltimo 6 H
rimeiro 6 H
9
D
7
J
;
K
1
H
Mltimo 6 J
H. 5imule a ao do algoritmo de %erificao de )24+, )DE+ e )?@+ em nas eCpress"es aritmticas a
seguir e %erifique o resultado da a%aliao 2se a eCpresso %&lida ou no4$
a4 2A = 8E4
*4 D?A = 8@ 1 ?27 , D4@
c4 2A = 84 1 D7 = DE 1 ?F = N@
d4 22O4 F D2?P = Q@4E4
e4 222A444
Implementao de Pilha em Java (Aula Prtica da Semana)
public class Pilha
{
public int topo;
public int dado[];
public Pilha(int max)
{
topo = -1;
dado = new int[ max ];
}
public boolean cheia(){
return (topo == dadolen!th - 1) " true # $alse;
}
public boolean %a&ia(){
return (topo == -1) " true # $alse;
}
public %oid insere(int in$o)
{
i$ (cheia())
'(stemoutprintln()*nPilha +heia));
else dado[,,topo] = in$o;
}
public int retira(){
i$ (%a&ia()){
'(stemoutprintln()*nPilha -a&ia));
return -1;
}
else
return (dado[topo--]);
}
public %oid imprime(){
int i;
$or(i=.; i /= topo; i,,)
'(stemoutprintln(dado[i] , )*n));
}
public int topo(){
i$ (0%a&ia())
return(dado[topo]);
else return 11;
}
static public %oid main('trin! ar!s[])
{
Pilha p = new Pilha( 1. );
pinsere( 1. );
pinsere( 2. );
pimprime();
pretira();
pretira();
pretira();
pimprime();
'(stemoutprintln(ptopo);
}
}

Вам также может понравиться