Escolar Documentos
Profissional Documentos
Cultura Documentos
Listas e Filas Olhar, Olhar
Listas e Filas Olhar, Olhar
PMR2300
Escola Politécnica da Universidade de São Paulo
public class P i l h a A r {
private Object a r r a n j o [ ] ;
p r i v a t e i n t topo ;
s t a t i c p r i v a t e f i n a l i n t DEFAULT = 1 0 ;
public P i l h a A r ( ) {
a r r a n j o = new O b j e c t [ DEFAULT ] ;
topo = −1;
}
p r i v a t e void d u p l i q u e A r r a n j o ( ) {
Object novoArranjo [ ] =
Object [2 ∗ a r r a n j o . length ] ;
f o r ( i n t i =0; i < a r r a n j o . l e n g t h ; i ++)
n o vo A r r a n j o [ i ] = a r r a n j o [ i ] ;
a r r a n j o = novoArranjo ;
}
public O b j e c t t o p ( ) {
i f ( topo >= 0 )
r e t u r n ( a r r a n j o [ topo ] ) ;
else r e t u r n ( n u l l ) ;
}
public O b j e c t pop ( ) {
i f ( topo >= 0 )
r e t u r n ( a r r a n j o [ topo − −]);
else r e t u r n ( n u l l ) ;
}
}
A + B ∗ (C/D + E)
( ()
i f ( o== ’ 0 ’ ) {
System . o u t . p r i n t l n ( " F a l t a a b e r t u r a ! " ) ;
System . e x i t ( −2);
}
}
}
i f ( p i l h a . tamanho ( ) > 0 ) {
System . o u t . p r i n t l n ( " F a l t a fechamento ! " ) ;
System . e x i t ( −3);
}
else System . o u t . p r i n t l n ( " Entrada c o n s i s t e n t e ! " ) ;
}
}
import j a v a . u t i l . S t r i n g T o k e n i z e r ;
public class A v a l i a {
s t a t i c public void main ( S t r i n g args [ ] ) {
i f ( args . l e n g t h <1) {
System . o u t . p r i n t l n ( " I n s i r a e n t r a d a ! " ) ;
System . e x i t ( −1);
}
S t r i n g e n t r a d a = args [ 0 ] ;
P i l h a A r p i l h a = new P i l h a A r ( ) ;
S t r i n g T o k e n i z e r s t = new S t r i n g T o k e n i z e r ( e n t r a d a ) ;
while ( s t . hasMoreElements ( ) ) {
S t r i n g nextToken = s t . nextToken ( ) ;
i f ( nextToken . compareTo ( " + " ) == 0 ) {
opera ( p i l h a , 1 ) ;
} else i f ( nextToken . compareTo ( "−" ) = = 0 ) {
opera ( p i l h a , 2 ) ;
} else i f ( nextToken . compareTo ( " ∗ " ) = = 0 ) {
opera ( p i l h a , 3 ) ;
} else i f ( nextToken . compareTo ( " / " ) = = 0 ) {
opera ( p i l h a , 4 ) ;
} else i f ( nextToken . compareTo ( " ^ " ) = = 0 ) {
opera ( p i l h a , 5 ) ;
} else
p i l h a . push ( nextToken ) ;
}
System . o u t . p r i n t l n ( " Resultado = " + p i l h a . pop ( ) ) ;
}
s t a t i c void opera ( P i l h a A r p i l h a , i n t t i p o ) {
i n t i n t 1 = I n t e g e r . p a r s e I n t ( ( S t r i n g ) ( p i l h a . pop ( ) ) ) ;
i n t i n t 2 = I n t e g e r . p a r s e I n t ( ( S t r i n g ) ( p i l h a . pop ( ) ) ) ;
int resultado = 0;
i f ( t i p o == 1 )
resultado = int2 + int1 ;
else i f ( t i p o == 2 )
resultado = int2 − int1 ;
else i f ( t i p o == 3 )
resultado = int2 ∗ int1 ;
else i f ( t i p o == 4 )
resultado = int2 / int1 ;
else i f ( t i p o == 5 ) {
resultado = 1;
f o r ( i n t i =0; i < i n t 1 ; i ++)
resultado = resultado ∗ int2 ;
}
p i l h a . push ( ( new I n t e g e r ( r e s u l t a d o ) ) . t o S t r i n g ( ) ) ;
}
}
A − B ∗ C + D:
Entrada Pilha Saída
A A
− − A
B − AB
∗ −∗ AB
C −∗ ABC
+ + ABC∗−
D ABC∗−D+
A ∗ B − C + D:
Entrada Pilha Saída
A A
∗ ∗ A
B ∗ AB
− − AB∗
C − AB∗C
+ + AB∗C−
D AB∗C−D+
A/(B + C) ∗ D
((A − (B ∗ C)) + D)
1 − 2 ˆ 3 − (4 + 5 ∗ 6) ∗ 7
?
a b c d e
6 6
vai sair... entrou...
public F i l a A r ( ) {
a r r a n j o = new O b j e c t [ DEFAULT ] ;
esvazie ( ) ;
}
public i n t tamanho ( ) {
r e t u r n ( tamanho ) ;
}
Fabio Gagliardi Cozman Estruturas de Dados — Pilhas, Filas, Listas
Implementação de Fila (2)
public void e s v a z i e ( ) {
tamanho = 0 ;
indiceVaiSair = 0;
i n d i c e E n t r o u = a r r a n j o . l e n g t h −1;
}
p r i v a t e i n t incremente ( i n t i n d i c e ) {
i n d i c e ++;
i f ( i n d i c e == a r r a n j o . l e n g t h )
indice = 0;
return ( i n d i c e ) ;
}
public O b j e c t dequeue ( ) {
i f ( tamanho == 0 )
return ( null ) ;
tamanho−−;
Object x = a r r a n j o [ i n d i c e V a i S a i r ] ;
i n d i c e V a i S a i r = incremente ( i n d i c e V a i S a i r ) ;
return ( x ) ;
}
}
public No ( O b j e c t x , No p ) {
dado = x ;
proximo = p ;
}
}
Nó a (dado 1) −→ Nó b (dado 2) −→ . . .
No c = new No ( x , a . proximo ) ;
a . proximo = c ;
Alternativamente,
a . proximo = new No ( x , a . proximo ) ;
Remoção:
i f ( a . proximo ! = n u l l )
a . proximo = c o r r e n t e . proximo . proximo ;
←− ←− ←− ←−
Nó a (dado 1) Nó b (dado 2) Nó c (dado 3)
−→ −→ −→ −→
public class P i l h a L i {
p r i v a t e No topo ;
public P i l h a L i ( ) {
topo = n u l l ;
}
public O b j e c t pop ( ) {
i f ( topo == n u l l ) r e t u r n ( n u l l ) ;
O b j e c t t = topo . dado ;
topo = topo . proximo ;
return ( t ) ;
}
}
public F i l a L i ( ) {
vaiSair = null ;
entrou = null ;
}
public void enqueue ( O b j e c t x ) {
i f ( v a i S a i r == n u l l ) {
e n t r o u = new No ( x ) ;
v a i S a i r = entrou ;
} else {
e n t r o u . proximo = new No ( x ) ;
e n t r o u = e n t r o u . proximo ;
}
}
public O b j e c t dequeue ( ) {
i f ( v a i S a i r == n u l l ) r e t u r n ( n u l l ) ;
O b j e c t t = v a i S a i r . dado ;
v a i S a i r = v a i S a i r . proximo ;
return ( t ) ;
}
}
Fabio Gagliardi Cozman Estruturas de Dados — Pilhas, Filas, Listas