Buscar

01 Pilhas C v8


Prévia do material em texto

1
ESTRUTURAS DE DADOS
► Pilhas
(Linguagem C)
Prof. Dr. Marcelo Duduchi
Aux. Docente Lucio Nunes
Estruturas de Dados
◼ Ao implementarmos programas de computador 
estamos de certa forma tentando representar o 
mundo real pela computação;
◼ Os dados a serem processados no computador 
representam uma abstração de parte da realidade na 
medida em que representam características 
selecionadas das entidades do mundo real;
2
Estruturas de Dados
◼ A forma segundo a qual os bits são agrupados, interpretados e 
manipulados pelo computador normalmente não nos interessa 
quando a nossa preocupação maior é resolver um problema 
específico;
◼ Felizmente, as linguagens atuais oferecem um conjunto básico de 
tipos de dados primitivos (inteiros, reais, caractere, booleano etc.) 
que podemos usar nas soluções de problemas;
◼ Da mesma forma, temos mecanismos que permitem criar 
agrupamentos complexos de dados a partir desses tipos primitivos; 
3
Estruturas de Dados
◼ Para representar o mundo computacionalmente é necessário 
modelar;
◼ É neste particular que o conceito de tipos abstratos de dados passa 
a ser muito importante para a computação;
◼ Um tipo abstrato de dados é formado por:
 Um conjunto de valores;
 Uma série de funções que podem ser aplicadas a estes valores.
◼ O modelo usado para representar a solução de uma classe de 
problemas podemos chamar de estrutura de dados; 
4
Estruturas de Dados
◼ O estudo das estruturas de dados envolve dois 
objetivos básicos:
 Teórico: Identificar e desenvolver modelos, determinando 
que classes de problemas podem resolver;
 Prático: Criar representações concretas dos objetivos e 
desenvolver sub-rotinas capazes de atuar como 
representações.
5
Listas Lineares
◼ Uma lista é uma coleção de elementos do mesmo tipo 
dispostos linearmente que podem ou não seguir uma 
determinada organização;
◼ Exemplo: [E
1
, E
2
, E
3
, ..., E
n
], onde n ≥ 0;
◼ Uma lista de pagamentos pode ser constituída por: 
prestação do carro, cartão de crédito, conta de luz, 
condomínio, televisão a cabo e prestação do crediário;
6
1 2
3 4
5 6
2
Listas Lineares
◼ Para a representação de alguns modelos do 
mundo real é necessário limitar o funcionamento 
das listas lineares;
◼ É neste contexto que surgem as listas lineares 
restritas. As mais utilizadas são:
Pilhas e
 Filas.
7
Pilhas
◼ Uma lista linear onde tanto a entrada quanto a saída 
precisa ser feita pela mesma extremidade é conhecida 
como pilha;
◼ Neste caso o último elemento que entrar é o primeiro a 
sair (Last In / First Out);
◼ Existem duas funções que se aplicam a todas as pilhas: 
 PUSH: insere o item no topo da pilha;
 POP: remove o item do topo da pilha.
8
Pilhas (modelo conceitual)
9
Novos elementos são 
armazenados no topo 
da pilha.
A
Pilhas (modelo conceitual)
Push
10
Novos elementos são 
armazenados no topo 
da pilha.
A
Pilhas (modelo conceitual)
11
Novos elementos são 
armazenados no topo 
da pilha.
B
A
Pilhas (modelo conceitual)
Push
12
Novos elementos são 
armazenados no topo 
da pilha.
A
B
7 8
9 10
11 12
3
Pilhas (modelo conceitual)
13
Novos elementos são 
armazenados no topo 
da pilha.
C
A
B
Pilhas (modelo conceitual)
Push
14
Novos elementos são 
armazenados no topo 
da pilha.
A
B
C
Pilhas (modelo conceitual)
15
Novos elementos são 
armazenados no topo 
da pilha.
D
A
B
C
Pilhas (modelo conceitual)
Push
16
Novos elementos são 
armazenados no topo 
da pilha.
A
B
C
D
Pilhas (modelo conceitual)
17
A
B
C
DSequência armazenada 
em pilha.
Pilhas (modelo conceitual)
Pop
18
A
B
C
D
O último elemento que 
entrou será o primeiro a 
sair (LIFO).
13 14
15 16
17 18
4
Pilhas (modelo conceitual)
Pop
19
A
B
C
O último elemento que 
entrou será o primeiro a 
sair (LIFO).
Pilhas (modelo conceitual)
Pop
20
A
B
O último elemento que 
entrou será o primeiro a 
sair (LIFO).
Pilhas (modelo conceitual)
Pop
21
A
O último elemento que 
entrou será o primeiro a 
sair (LIFO).
Pilhas (representação gráfica)
22
Topo →
Pilhas (representação gráfica)
23
push(pilha, 'D')
Topo →
D
Pilhas (representação gráfica)
24
D
Topo →
19 20
21 22
23 24
5
Pilhas (representação gráfica)
25
D
Topo →
D
Topo →
Pilhas (representação gráfica)
26
D
Topo →
pop(pilha)
Topo →
D
Pilhas (representação gráfica)
27
D
Topo →
Topo →
Pilhas (representação gráfica)
28
D
Topo →
Topo → Topo →
Pilhas (representação gráfica)
29
D
Topo →
Topo →
push(pilha, 'A')
Topo →
A
Pilhas (representação gráfica)
30
D
Topo →
Topo →
A
Topo →
25 26
27 28
29 30
6
Pilhas (representação gráfica)
31
D
Topo →
Topo →
A
Topo →
A
Topo →
Pilhas (representação gráfica)
32
D
Topo →
Topo →
A
Topo →
A
push(pilha, 'V')
Topo →
V
Pilhas (representação gráfica)
33
D
Topo →
Topo →
A
Topo →
V
A
Topo →
Pilhas (representação gráfica)
34
D
Topo →
Topo →
A
Topo →
V
A
Topo → V
A
Topo →
Pilhas (representação gráfica)
35
D
Topo →
Topo →
A
Topo →
V
A
Topo →
A
pop(pilha)
Topo →
V
Pilhas (representação gráfica)
36
D
Topo →
Topo →
A
Topo →
V
A
Topo →
A
Topo →
31 32
33 34
35 36
7
Pilhas (representação gráfica)
37
D
Topo →
Topo →
A
Topo →
V
A
Topo →
A
Topo →
A
Topo →
Pilhas (representação gráfica)
38
D
Topo →
Topo →
A
Topo →
V
A
Topo →
A
Topo →
A
push(pilha, 'B')
Topo →
B
Pilhas (representação gráfica)
39
D
Topo →
Topo →
A
Topo →
V
A
Topo →
A
Topo →
B
A
Topo →
Pilhas (representação gráfica)
40
B
A
Topo →
Pilhas (representação gráfica)
41
B
A
push(pilha, 'G')
Topo →
G
Pilhas (representação gráfica)
42
G
B
A
Topo →
37 38
39 40
41 42
8
Pilhas (representação gráfica)
43
G
B
A
Topo → G
B
A
Topo →
Pilhas (representação gráfica)
44
G
B
A
Topo → G
B
A
push(pilha, 'H')
Topo →
H
Pilhas (representação gráfica)
45
G
B
A
Topo →
H
G
B
A
Topo →
Pilhas (representação gráfica)
46
G
B
A
Topo →
H
G
B
A
Topo → H
G
B
A
Topo →
Pilhas (representação gráfica)
47
G
B
A
Topo →
H
G
B
A
Topo →
G
B
A
pop(pilha)
Topo →
H
Pilhas (representação gráfica)
48
G
B
A
Topo →
H
G
B
A
Topo →
G
B
A
Topo →
43 44
45 46
47 48
9
Pilhas (representação gráfica)
49
G
B
A
Topo →
H
G
B
A
Topo →
G
B
A
Topo →
G
B
A
Topo →
Pilhas (representação gráfica)
50
G
B
A
Topo →
H
G
B
A
Topo →
G
B
A
Topo →
B
A
pop(pilha)
Topo →
G
Pilhas (representação gráfica)
51
G
B
A
Topo →
H
G
B
A
Topo →
G
B
A
Topo →
B
A
Topo →
Pilhas (representação gráfica)
52
G
B
A
Topo →
H
G
B
A
Topo →
G
B
A
Topo →
B
A
Topo → B
A
Topo →
Pilhas (representação gráfica)
53
G
B
A
Topo →
H
G
B
A
Topo →
G
B
A
Topo →
B
A
Topo →
A
pop(pilha)
Topo →
B
Pilhas (representação gráfica)
54
G
B
A
Topo →
H
G
B
A
Topo →
G
B
A
Topo →
B
A
Topo →
A
Topo →
49 50
51 52
53 54
10
Pilhas (representação gráfica)
55
G
B
A
Topo →
H
G
B
A
Topo →
G
B
A
Topo →
B
A
Topo →
A
Topo →
A
Topo →
Pilhas (representação gráfica)
56
G
B
A
Topo →
H
G
B
A
Topo →
G
B
A
Topo →
B
A
Topo →
A
Topo →
pop(pilha)
Topo →
A
Pilhas (representação gráfica)
57
G
B
A
Topo →
H
G
B
A
Topo →
G
B
A
Topo →
B
A
Topo →
A
Topo →
Topo →
Pilhas (implementação)
◼ Consideremos para a nossa implementação um grupo de 
operações:
➢ create → inicializa a pilha
➢ destroy → esvazia a pilha
➢ isfull → verifica se está cheia 
➢ isempty → verifica se está vazia
➢ push → insere um elemento
➢ pop → retira um elemento
➢ top → mostra o elemento do topo
58
Pilhas (definição da estrutura)
59
typedef struct pilha {
char vet[6];
int topo;
} TPilha;
TPilha
vet topo
0 1 2 3 4 5
Pilhas (create, destroy, isfull e isempty)
60
void create(TPilha *p) {
p->topo = -1;
}
void destroy(TPilha *p) {
p->topo = -1;
}
int isfull(TPilha *p) {
if (p->topo == 5)
return 1;
else
return 0;
}
intisempty(TPilha *p) {
if (p->topo == -1)
return 1;
else
return 0;
}
55 56
57 58
59 60
11
Pilhas (isfull e isempty)
61
int isfull(TPilha *p) {
return p->topo == 5;
}
int isempty(TPilha *p) {
return p->topo == -1;
}
char pop(TPilha *p) {
if (isempty(p)) {
puts("underflow");
abort();
}
char aux = p->vet[p->topo];
p->topo--;
return aux;
}
Pilhas (push e pop)
62
void push(TPilha *p, char x) {
if (isfull(p) {
puts("overflow");
abort();
}
p->topo++;
p->vet[p->topo] = x;
}
Pilhas (top)
63
char top(TPilha *p) {
if (isempty(p)) {
puts("underflow");
abort();
}
return p->vet[p->topo];
}
Pilhas (1º exemplo de utilização)
64
int main(void) {
TPilha p;
create(&p);
push(&p, 'A');
push(&p, 'B');
push(&p, 'C');
printf("%c\n", pop(&p));
printf("%c\n", pop(&p));
return 0;
}
Pilhas (1º exemplo de utilização)
65
int main(void) {
TPilha p;
create(&p);
push(&p, 'A');
push(&p, 'B');
push(&p, 'C');
printf("%c\n", pop(&p));
printf("%c\n", pop(&p));
return 0;
}
A
Pilhas (1º exemplo de utilização)
66
int main(void) {
TPilha p;
create(&p);
push(&p, 'A');
push(&p, 'B');
push(&p, 'C');
printf("%c\n", pop(&p));
printf("%c\n", pop(&p));
return 0;
}
A
61 62
63 64
65 66
12
Pilhas (1º exemplo de utilização)
67
int main(void) {
TPilha p;
create(&p);
push(&p, 'A');
push(&p, 'B');
push(&p, 'C');
printf("%c\n", pop(&p));
printf("%c\n", pop(&p));
return 0;
}
A
B
Pilhas (1º exemplo de utilização)
68
int main(void) {
TPilha p;
create(&p);
push(&p, 'A');
push(&p, 'B');
push(&p, 'C');
printf("%c\n", pop(&p));
printf("%c\n", pop(&p));
return 0;
}
B
A
Pilhas (1º exemplo de utilização)
69
int main(void) {
TPilha p;
create(&p);
push(&p, 'A');
push(&p, 'B');
push(&p, 'C');
printf("%c\n", pop(&p));
printf("%c\n", pop(&p));
return 0;
}
B
A
C
Pilhas (1º exemplo de utilização)
70
int main(void) {
TPilha p;
create(&p);
push(&p, 'A');
push(&p, 'B');
push(&p, 'C');
printf("%c\n", pop(&p));
printf("%c\n", pop(&p));
return 0;
}
C
B
A
Pilhas (1º exemplo de utilização)
71
int main(void) {
TPilha p;
create(&p);
push(&p, 'A');
push(&p, 'B');
push(&p, 'C');
printf("%c\n", pop(&p));
printf("%c\n", pop(&p));
return 0;
}
B
A
C
Pilhas (1º exemplo de utilização)
72
int main(void) {
TPilha p;
create(&p);
push(&p, 'A');
push(&p, 'B');
push(&p, 'C');
printf("%c\n", pop(&p));
printf("%c\n", pop(&p));
return 0;
}
A
B
67 68
69 70
71 72
13
Pilhas (1º exemplo de utilização)
73
int main(void) {
TPilha p;
create(&p);
push(&p, 'A');
push(&p, 'B');
push(&p, 'C');
printf("%c\n", pop(&p));
printf("%c\n", pop(&p));
return 0;
}
A
Pilhas (2º exemplo de utilização)
74
void inverte(char s[]) {
int i, tam;
TPilha p;
create(&p);
tam = strlen(s);
for (i = 0; i < tam; i++)
push(&p, s[i]);
for (i = 0; !isempty(&p); i++)
s[i] = pop(&p);
}
Roma
Pilhas (2º exemplo de utilização)
75
void inverte(char s[]) {
int i, tam;
TPilha p;
create(&p);
tam = strlen(s);
for (i = 0; i < tam; i++)
push(&p, s[i]);
for (i = 0; !isempty(&p); i++)
s[i] = pop(&p);
}
R
Roma
Pilhas (2º exemplo de utilização)
76
void inverte(char s[]) {
int i, tam;
TPilha p;
create(&p);
tam = strlen(s);
for (i = 0; i < tam; i++)
push(&p, s[i]);
for (i = 0; !isempty(&p); i++)
s[i] = pop(&p);
}
o
R
Roma
Pilhas (2º exemplo de utilização)
77
void inverte(char s[]) {
int i, tam;
TPilha p;
create(&p);
tam = strlen(s);
for (i = 0; i < tam; i++)
push(&p, s[i]);
for (i = 0; !isempty(&p); i++)
s[i] = pop(&p);
}
m
o
R
Roma
Pilhas (2º exemplo de utilização)
78
void inverte(char s[]) {
int i, tam;
TPilha p;
create(&p);
tam = strlen(s);
for (i = 0; i < tam; i++)
push(&p, s[i]);
for (i = 0; !isempty(&p); i++)
s[i] = pop(&p);
}
Roma
a
m
o
R
73 74
75 76
77 78
14
Pilhas (2º exemplo de utilização)
79
void inverte(char s[]) {
int i, tam;
TPilha p;
create(&p);
tam = strlen(s);
for (i = 0; i < tam; i++)
push(&p, s[i]);
for (i = 0; !isempty(&p); i++)
s[i] = pop(&p);
}
a
m
o
R
Pilhas (2º exemplo de utilização)
80
void inverte(char s[]) {
int i, tam;
TPilha p;
create(&p);
tam = strlen(s);
for (i = 0; i < tam; i++)
push(&p, s[i]);
for (i = 0; !isempty(&p); i++)
s[i] = pop(&p);
}
m
o
R
a
Pilhas (2º exemplo de utilização)
81
void inverte(char s[]) {
int i, tam;
TPilha p;
create(&p);
tam = strlen(s);
for (i = 0; i < tam; i++)
push(&p, s[i]);
for (i = 0; !isempty(&p); i++)
s[i] = pop(&p);
}
o
R
am
Pilhas (2º exemplo de utilização)
82
void inverte(char s[]) {
int i, tam;
TPilha p;
create(&p);
tam = strlen(s);
for (i = 0; i < tam; i++)
push(&p, s[i]);
for (i = 0; !isempty(&p); i++)
s[i] = pop(&p);
}
R
amo
Pilhas (2º exemplo de utilização)
83
void inverte(char s[]) {
int i, tam;
TPilha p;
create(&p);
tam = strlen(s);
for (i = 0; i < tam; i++)
push(&p, s[i]);
for (i = 0; !isempty(&p); i++)
s[i] = pop(&p);
}
amoR
Pilhas (aplicações)
◼ Pilha de chamada de rotinas:
Caso seja uma chamada, colocar o endereço 
da próxima instrução na pilha, executando a 
rotina chamada;
Caso seja um “retorne”, retirar um endereço 
da pilha, passando a executá-lo. 
84
79 80
81 82
83 84
15
Pilhas (aplicações)
85
INSTRUÇÃO ESTADO DA PILHA 
e0
Rotina P
e1: A( );
e2: C( );
e3: B( );
e4: Retorne;
Rotina A
e5: B( );
e6: Retorne;
Rotina B
e7: Retorne;
Rotina C
e8: Retorne;
Pilhas (aplicações)
86
INSTRUÇÃO ESTADO DA PILHA 
e0
e1: A( ); e0
Rotina P
e1: A( );
e2: C( );
e3: B( );
e4: Retorne;
Rotina A
e5: B( );
e6: Retorne;
Rotina B
e7: Retorne;
Rotina C
e8: Retorne;
Pilhas (aplicações)
87
INSTRUÇÃO ESTADO DA PILHA 
e0
e1: A( ); e0, e2
Rotina P
e1: A( );
e2: C( );
e3: B( );
e4: Retorne;
Rotina A
e5: B( );
e6: Retorne;
Rotina B
e7: Retorne;
Rotina C
e8: Retorne;
Pilhas (aplicações)
88
INSTRUÇÃO ESTADO DA PILHA 
e0
e1: A( ); e0, e2
e5: B( ); e0, e2
Rotina P
e1: A( );
e2: C( );
e3: B( );
e4: Retorne;
Rotina A
e5: B( );
e6: Retorne;
Rotina B
e7: Retorne;
Rotina C
e8: Retorne;
Pilhas (aplicações)
89
INSTRUÇÃO ESTADO DA PILHA 
e0
e1: A( ); e0, e2
e5: B( ); e0, e2, e6 
Rotina P
e1: A( );
e2: C( );
e3: B( );
e4: Retorne;
Rotina A
e5: B( );
e6: Retorne;
Rotina B
e7: Retorne;
Rotina C
e8: Retorne;
Pilhas (aplicações)
90
INSTRUÇÃO ESTADO DA PILHA 
e0
e1: A( ); e0, e2
e5: B( ); e0, e2, e6 
e7: Retorne; e0, e2, e6
Rotina P
e1: A( );
e2: C( );
e3: B( );
e4: Retorne;
Rotina A
e5: B( );
e6: Retorne;
Rotina B
e7: Retorne;
Rotina C
e8: Retorne;
85 86
87 88
89 90
16
Pilhas (aplicações)
91
INSTRUÇÃO ESTADO DA PILHA 
e0
e1: A( ); e0, e2
e5: B( ); e0, e2, e6 
e7: Retorne; e0, e2
e6: Retorne; e0, e2
Rotina P
e1: A( );
e2: C( );
e3: B( );
e4: Retorne;
Rotina A
e5: B( );
e6: Retorne;
Rotina B
e7: Retorne;
Rotina C
e8: Retorne;
Pilhas (aplicações)
92
INSTRUÇÃO ESTADO DA PILHA 
e0
e1: A( ); e0, e2
e5: B( ); e0, e2, e6 
e7: Retorne; e0, e2 
e6: Retorne; e0
e2: C( ); e0
Rotina P
e1: A( );
e2: C( );
e3: B( );
e4: Retorne;
Rotina A
e5: B( );
e6: Retorne;
Rotina B
e7: Retorne;
Rotina C
e8: Retorne;
Pilhas (aplicações)
93
INSTRUÇÃO ESTADO DA PILHA 
e0
e1: A( ); e0, e2
e5: B( ); e0, e2, e6 
e7: Retorne; e0, e2 
e6: Retorne; e0
e2: C( ); e0, e3 
Rotina P
e1: A( );
e2: C( );
e3: B( );
e4: Retorne;
Rotina A
e5: B( );
e6: Retorne;
Rotina B
e7: Retorne;
Rotina C
e8: Retorne;
Pilhas (aplicações)
94
INSTRUÇÃO ESTADO DA PILHA 
e0
e1: A( ); e0, e2
e5: B( ); e0, e2, e6 
e7: Retorne; e0, e2 
e6: Retorne; e0
e2: C( ); e0, e3 
e8: Retorne; e0, e3
Rotina P
e1: A( );
e2: C( );
e3: B( );
e4: Retorne;
Rotina A
e5: B( );
e6: Retorne;
Rotina B
e7: Retorne;
Rotina C
e8: Retorne;
Pilhas (aplicações)
95
INSTRUÇÃO ESTADO DA PILHA 
e0
e1: A( ); e0, e2
e5: B( ); e0, e2, e6 
e7: Retorne; e0, e2 
e6: Retorne; e0
e2: C( ); e0, e3 
e8: Retorne; e0
e3: B( ); e0
Rotina P
e1: A( );
e2: C( );
e3: B( );
e4: Retorne;
Rotina A
e5: B( );
e6: Retorne;
Rotina B
e7: Retorne;
Rotina C
e8: Retorne;
Pilhas (aplicações)
96
INSTRUÇÃO ESTADO DA PILHA 
e0
e1: A( ); e0, e2
e5: B( ); e0, e2, e6 
e7: Retorne;e0, e2 
e6: Retorne; e0
e2: C( ); e0, e3 
e8: Retorne; e0
e3: B( ); e0, e4
Rotina P
e1: A( );
e2: C( );
e3: B( );
e4: Retorne;
Rotina A
e5: B( );
e6: Retorne;
Rotina B
e7: Retorne;
Rotina C
e8: Retorne;
91 92
93 94
95 96
17
Pilhas (aplicações)
97
INSTRUÇÃO ESTADO DA PILHA 
e0
e1: A( ); e0, e2
e5: B( ); e0, e2, e6 
e7: Retorne; e0, e2 
e6: Retorne; e0
e2: C( ); e0, e3 
e8: Retorne; e0
e3: B( ); e0, e4
e7: Retorne; e0, e4
Rotina P
e1: A( );
e2: C( );
e3: B( );
e4: Retorne;
Rotina A
e5: B( );
e6: Retorne;
Rotina B
e7: Retorne;
Rotina C
e8: Retorne;
Pilhas (aplicações)
98
INSTRUÇÃO ESTADO DA PILHA 
e0
e1: A( ); e0, e2
e5: B( ); e0, e2, e6 
e7: Retorne; e0, e2 
e6: Retorne; e0
e2: C( ); e0, e3 
e8: Retorne; e0
e3: B( ); e0, e4
e7: Retorne; e0
e4: Retorne; e0
Rotina P
e1: A( );
e2: C( );
e3: B( );
e4: Retorne;
Rotina A
e5: B( );
e6: Retorne;
Rotina B
e7: Retorne;
Rotina C
e8: Retorne;
Pilhas (aplicações)
99
INSTRUÇÃO ESTADO DA PILHA 
e0
e1: A( ); e0, e2
e5: B( ); e0, e2, e6 
e7: Retorne; e0, e2 
e6: Retorne; e0
e2: C( ); e0, e3 
e8: Retorne; e0
e3: B( ); e0, e4
e7: Retorne; e0
e4: Retorne; e0
e0: [volta p/ S.O.]
Rotina P
e1: A( );
e2: C( );
e3: B( );
e4: Retorne;
Rotina A
e5: B( );
e6: Retorne;
Rotina B
e7: Retorne;
Rotina C
e8: Retorne;
Pilhas (infixa -> posfixa)
100
Infixa 
(((3 − 1) + (2 ∗ 4))/5)
Posfixa
3 1 − 2 4 ∗ + 5 /
Pilhas (infixa -> posfixa)
101
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Posfixa:
( : ignore
0…9 : anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string
Pilhas (infixa -> posfixa)
102
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Posfixa:
( : ignore
0…9 : anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string
97 98
99 100
101 102
18
Pilhas (infixa -> posfixa)
103
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Posfixa:
( : ignore
0…9 : anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string
Pilhas (infixa -> posfixa)
104
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Posfixa:
( : ignore
0…9 : anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string
Pilhas (infixa -> posfixa)
105
Infixa: (((3 − 1) + (2 ∗ 4))/5)
( : ignore
0…9 : anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string
Posfixa: 3
Pilhas (infixa -> posfixa)
106
−
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Posfixa: 3
( : ignore
0…9 : anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string
Pilhas (infixa -> posfixa)
107
−
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Posfixa: 3 1
( : ignore
0…9 : anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string
Pilhas (infixa -> posfixa)
108
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Posfixa: 3 1 −
( : ignore
0…9 : anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string
103 104
105 106
107 108
19
Pilhas (infixa -> posfixa)
109
+
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Posfixa: 3 1 −
( : ignore
0…9 : anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string
Pilhas (infixa -> posfixa)
110
+
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Posfixa: 3 1 −
( : ignore
0…9 : anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string
Pilhas (infixa -> posfixa)
111
+
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Posfixa: 3 1 − 2
( : ignore
0…9 : anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string
Pilhas (infixa -> posfixa)
112
∗
+
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Posfixa: 3 1 − 2
( : ignore
0…9 : anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string
Pilhas (infixa -> posfixa)
113
∗
+
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Posfixa: 3 1 − 2 4
( : ignore
0…9 : anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string
Pilhas (infixa -> posfixa)
114
+
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Posfixa: 3 1 − 2 4 ∗
( : ignore
0…9 : anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string
109 110
111 112
113 114
20
Pilhas (infixa -> posfixa)
115
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Posfixa: 3 1 − 2 4 ∗ +
( : ignore
0…9 : anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string
Pilhas (infixa -> posfixa)
116
/
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Posfixa: 3 1 − 2 4 ∗ +
( : ignore
0…9 : anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string
Pilhas (infixa -> posfixa)
117
/
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Posfixa: 3 1 − 2 4 ∗ + 5
( : ignore
0…9 : anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string
Pilhas (infixa -> posfixa)
118
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Posfixa: 3 1 − 2 4 ∗ + 5 /
( : ignore
0…9 : anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string
Pilhas (infixa -> prefixa)
119
Infixa 
(((3 − 1) + (2 ∗ 4))/5)
Prefixa
/ + − 3 1 ∗ 2 4 5
Pilhas (infixa -> prefixa)
120
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Prefixa:
) : ignore
0…9 : anexe à string
+, -, *, /: empilhe
( : desempilhe e anexe à string
115 116
117 118
119 120
21
Pilhas (infixa -> prefixa)
121
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Prefixa:
) : ignore
0…9 : anexe à string
+, -, *, /: empilhe
( : desempilhe e anexe à string
Pilhas (infixa -> prefixa)
122
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Prefixa: 5
) : ignore
0…9 : anexe à string
+, -, *, /: empilhe
( : desempilhe e anexe à string
Pilhas (infixa -> prefixa)
123
/
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Prefixa: 5
) : ignore
0…9 : anexe à string
+, -, *, /: empilhe
( : desempilhe e anexe à string
Pilhas (infixa -> prefixa)
124
/
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Prefixa: 5
) : ignore
0…9 : anexe à string
+, -, *, /: empilhe
( : desempilhe e anexe à string
Pilhas (infixa -> prefixa)
125
/
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Prefixa: 5
) : ignore
0…9 : anexe à string
+, -, *, /: empilhe
( : desempilhe e anexe à string
Pilhas (infixa -> prefixa)
126
/
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Prefixa: 5 4
) : ignore
0…9 : anexe à string
+, -, *, /: empilhe
( : desempilhe e anexe à string
121 122
123 124
125 126
22
Pilhas (infixa -> prefixa)
127
∗
/
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Prefixa: 5 4
) : ignore
0…9 : anexe à string
+, -, *, /: empilhe
( : desempilhe e anexe à string
Pilhas (infixa -> prefixa)
128
∗
/
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Prefixa: 5 4 2
) : ignore
0…9 : anexe à string
+, -, *, /: empilhe
( : desempilhe e anexe à string
Pilhas (infixa -> prefixa)
129
/
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Prefixa: 5 4 2 ∗
) : ignore
0…9 : anexe à string
+, -, *, /: empilhe
( : desempilhe e anexe à string
Pilhas (infixa -> prefixa)
130
+
/
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Prefixa: 5 4 2 ∗
) : ignore
0…9 : anexe à string
+, -, *, /: empilhe
( : desempilhe e anexe à string
Pilhas (infixa -> prefixa)
131
+
/
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Prefixa: 5 4 2 ∗
) : ignore
0…9 : anexe à string
+, -, *, /: empilhe
( : desempilhe e anexe à string
Pilhas (infixa -> prefixa)
132
+
/
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Prefixa: 5 4 2 ∗ 1
) : ignore
0…9 : anexe à string
+, -, *, /: empilhe
( : desempilhe e anexe à string
127 128
129 130
131 132
23
Pilhas (infixa -> prefixa)
133
−
+
/
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Prefixa: 5 4 2 ∗ 1
) : ignore
0…9 : anexe à string
+, -, *, /: empilhe
( : desempilhe e anexe à string
Pilhas (infixa -> prefixa)
134
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Prefixa: 5 4 2 ∗ 1 3
) : ignore
0…9 : anexe à string
+, -, *, /: empilhe
( : desempilhe e anexe à string
−
+
/
Pilhas (infixa -> prefixa)
135
+
/
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Prefixa: 5 4 2 ∗ 1 3 −
) : ignore
0…9 : anexe à string
+, -, *, /: empilhe
( : desempilhe e anexe à string
Pilhas (infixa -> prefixa)
136
/
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Prefixa: 5 4 2 ∗ 1 3 − + 
) : ignore
0…9 : anexe à string
+, -, *, /: empilhe
( : desempilhe e anexe à string
Pilhas (infixa -> prefixa)
137
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Prefixa: 5 4 2 ∗ 1 3 − + / 
) : ignore
0…9 : anexe à string
+, -, *, /: empilhe
( : desempilhe e anexe à string
Pilhas (infixa -> prefixa)
138
Infixa: (((3 − 1) + (2 ∗ 4))/5)
Prefixa: / + − 3 1 ∗ 2 4 5) : ignore
0…9 : anexe à string
+, -, *, /: empilhe
( : desempilhe e anexe à string
133 134
135 136
137 138
24
Pilhas (posfixa -> infixa)
139
Posfixa
3 1 − 2 4 ∗ + 5 /
Infixa 
(((3 − 1) + (2 ∗ 4))/5)
Pilhas (posfixa -> infixa)
140
Posfixa: 3 1 − 2 4 ∗ + 5 /
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha;
empilhe '(' + desempilha + 
[𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')'
Infixa: 
Pilhas (posfixa -> infixa)
141
3
Posfixa: 3 1 − 2 4 ∗ + 5 /
Infixa: 
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha;
empilhe '(' + desempilha + 
[𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')'
Pilhas (posfixa -> infixa)
142
1
3
Posfixa: 3 1 − 2 4 ∗ + 5 /
Infixa: 
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha;
empilhe '(' + desempilha + 
[𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')'
Pilhas (posfixa -> infixa)
143
3 − 1
Posfixa: 3 1 − 2 4 ∗ + 5 /
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha;
empilhe '(' + desempilha + 
[𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')'
Pilhas (posfixa -> infixa)
144
2
3 − 1
Posfixa: 3 1 − 2 4 ∗ + 5 /
Infixa: 
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha;
empilhe '(' + desempilha + 
[𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')'
139 140
141 142
143 144
25
Pilhas (posfixa -> infixa)
145
4
2
3 − 1
Posfixa: 3 1 − 2 4 ∗ + 5 /
Infixa: 
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha;
empilhe '(' + desempilha + 
[𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')'
Pilhas (posfixa -> infixa)
146
2 ∗ 4
3 − 1
Posfixa: 3 1 − 2 4 ∗ + 5 /
Infixa: 
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha;
empilhe '(' + desempilha + 
[𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')'
Pilhas (posfixa -> infixa)
147
((3 − 1) + (2 ∗ 4))
Posfixa: 3 1 − 2 4 ∗ + 5 /
Infixa: 
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha;
empilhe '(' + desempilha + 
[𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')'
Pilhas (posfixa -> infixa)
148
5
((3 − 1) + (2 ∗ 4))
Posfixa: 3 1 − 2 4 ∗ + 5 /
Infixa: 
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha;
empilhe '(' + desempilha + 
[𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')'
Pilhas (posfixa -> infixa)
149
(((3 − 1) + (2 ∗ 4))/5)
Posfixa: 3 1 − 2 4 ∗ + 5 /
Infixa: 
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha;
empilhe '(' + desempilha + 
[𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')'
Pilhas (posfixa -> infixa)
150
Posfixa: 3 1 − 2 4 ∗ + 5 /
Infixa: (((3 − 1) + (2 ∗ 4))/5)
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha;
empilhe '(' + desempilha + 
[𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')'
145 146
147 148
149 150
26
Pilhas (prefixa -> infixa)
151
Prefixa
/ + − 3 1 ∗ 2 4 5
Infixa 
(((3 − 1) + (2 ∗ 4))/5)
Pilhas (prefixa -> infixa)
152
Prefixa: / + − 3 1 ∗ 2 4 5
0…9 : empilhe
+, -, *, /: empilhe '(' + 
desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 
desempilha + ')'
Infixa: 
Pilhas (prefixa -> infixa)
153
5
Prefixa: / + − 3 1 ∗ 2 4 5
Infixa: 
0…9 : empilhe
+, -, *, /: empilhe '(' + 
desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 
desempilha + ')'
Pilhas (prefixa -> infixa)
154
4
5
Prefixa: / + − 3 1 ∗ 2 4 5
Infixa: 
0…9 : empilhe
+, -, *, /: empilhe '(' + 
desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 
desempilha + ')'
Pilhas (prefixa -> infixa)
155
2
4
5
Prefixa: / + − 3 1 ∗ 2 4 5
Infixa: 
0…9 : empilhe
+, -, *, /: empilhe '(' + 
desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 
desempilha + ')'
Pilhas (prefixa -> infixa)
156
(2 ∗ 4)
5
Prefixa: / + − 3 1 ∗ 2 4 5
Infixa: 
0…9 : empilhe
+, -, *, /: empilhe '(' + 
desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 
desempilha + ')'
151 152
153 154
155 156
27
Pilhas (prefixa -> infixa)
157
1
(2 ∗ 4)
5
Prefixa: / + − 3 1 ∗ 2 4 5
Infixa: 
0…9 : empilhe
+, -, *, /: empilhe '(' + 
desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 
desempilha + ')'
Pilhas (prefixa -> infixa)
158
3
1
(2 ∗ 4)
5
Prefixa: / + − 3 1 ∗ 2 4 5
Infixa: 
0…9 : empilhe
+, -, *, /: empilhe '(' + 
desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 
desempilha + ')'
Pilhas (prefixa -> infixa)
159
(3 − 1)
(2 ∗ 4)
5
Prefixa: / + − 3 1 ∗ 2 4 5
Infixa: 
0…9 : empilhe
+, -, *, /: empilhe '(' + 
desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 
desempilha + ')'
Pilhas (prefixa -> infixa)
160
((3 − 1) + (2 ∗ 4))
5
Prefixa: / + − 3 1 ∗ 2 4 5
Infixa: 
0…9 : empilhe
+, -, *, /: empilhe '(' + 
desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 
desempilha + ')'
Pilhas (prefixa -> infixa)
161
(((3 − 1) + (2 ∗ 4))/5)
Prefixa: / + − 3 1 ∗ 2 4 5
Infixa: 
0…9 : empilhe
+, -, *, /: empilhe '(' + 
desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 
desempilha + ')'
Pilhas (prefixa -> infixa)
162
Prefixa: / + − 3 1 ∗ 2 4 5
Infixa: (((3 − 1) + (2 ∗ 4))/5)
0…9 : empilhe
+, -, *, /: empilhe '(' + 
desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 
desempilha + ')'
157 158
159 160
161 162
28
163
AVALIAÇÃO DE EXPRESSÃO
POSFIXA
3 1 − 2 4 ∗ + 5 /
Pilhas (avaliação posfixa)
164
posfixa: 3 1 − 2 4 ∗ + 5 /
Resultado: 
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha; 
empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)
Pilhas (avaliação posfixa)
165
posfixa: 3 1 − 2 4 ∗ + 5 /
Resultado: 
3
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha; 
empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)
Pilhas (avaliação posfixa)
166
posfixa: 3 1 − 2 4 ∗ + 5 /
Resultado: 
1
3
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha; 
empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)
Pilhas (avaliação posfixa)
167
posfixa: 3 1 − 2 4 ∗ + 5 /
Resultado: 
2
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha; 
empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)
Pilhas (avaliação posfixa)
168
posfixa: 3 1 − 2 4 ∗ + 5 /
Resultado: 
2
2
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha; 
empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)
163 164
165 166
167 168
29
Pilhas (avaliação posfixa)
169
posfixa: 3 1 − 2 4 ∗ + 5 /
Resultado: 4
2
2
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha; 
empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)
Pilhas (avaliação posfixa)
170
posfixa: 3 1 − 2 4 ∗ + 5 /
Resultado: 
8
2
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha; 
empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)
Pilhas (avaliação posfixa)
171
posfixa: 3 1 − 2 4 ∗ + 5 /
Resultado: 
10
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha; 
empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)
Pilhas (avaliação posfixa)
172
posfixa: 3 1 − 2 4 ∗ + 5 /
Resultado: 
5
10
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha; 
empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)
Pilhas (avaliação posfixa)
173
posfixa: 3 1 − 2 4 ∗ + 5 /
Resultado: 
2
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha; 
empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)
Pilhas (avaliação posfixa)
174
posfixa: 3 1 − 2 4 ∗ + 5 /
Resultado: 2
0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha; 
empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)
169 170
171 172
173 174
30
175
AVALIAÇÃO DE EXPRESSÃO
PREFIXA
/ + − 3 1 ∗ 2 4 5
Pilhas (avaliação prefixa)
176
prefixa: / + − 3 1 ∗ 2 4 5
Resultado: 
0…9 : empilhe
+, -, *, /: empilhe(desempilha 
[𝑜𝑝𝑒𝑟𝑎çã𝑜] desempilha)
Pilhas (avaliação prefixa)
177
prefixa: / + − 3 1 ∗ 2 4 5
Resultado: 
0…9 : empilhe
+, -, *, /: empilhe(desempilha 
[𝑜𝑝𝑒𝑟𝑎çã𝑜] desempilha)5
Pilhas (avaliação prefixa)
178
prefixa: / + − 3 1 ∗ 2 4 5
Resultado: 
0…9 : empilhe
+, -, *, /: empilhe(desempilha 
[𝑜𝑝𝑒𝑟𝑎çã𝑜] desempilha)
4
5
Pilhas (avaliação prefixa)
179
prefixa: / + − 3 1 ∗ 2 4 5
Resultado: 
0…9 : empilhe
+, -, *, /: empilhe(desempilha 
[𝑜𝑝𝑒𝑟𝑎çã𝑜] desempilha)
2
4
5
Pilhas (avaliação prefixa)
180
prefixa: / + − 3 1 ∗ 2 4 5
Resultado: 
0…9 : empilhe
+, -, *, /: empilhe(desempilha 
[𝑜𝑝𝑒𝑟𝑎çã𝑜] desempilha)
8
5
175 176
177 178
179 180
31
Pilhas (avaliação prefixa)
181
prefixa: / + − 3 1 ∗ 2 4 5
Resultado: 
0…9 : empilhe
+, -, *, /: empilhe(desempilha 
[𝑜𝑝𝑒𝑟𝑎çã𝑜] desempilha)
1
8
5
Pilhas (avaliação prefixa)
182
prefixa: / + − 3 1 ∗ 2 4 5
Resultado: 
0…9 : empilhe
+, -, *, /: empilhe(desempilha 
[𝑜𝑝𝑒𝑟𝑎çã𝑜] desempilha)
3
1
8
5
Pilhas (avaliação prefixa)
183
prefixa: / + − 3 1 ∗ 2 4 5
Resultado: 
0…9 : empilhe
+, -, *, /: empilhe(desempilha 
[𝑜𝑝𝑒𝑟𝑎çã𝑜] desempilha)
2
8
5
Pilhas (avaliação prefixa)
184
prefixa: / + − 3 1 ∗ 2 4 5
Resultado: 
0…9 : empilhe
+, -, *, /: empilhe(desempilha 
[𝑜𝑝𝑒𝑟𝑎çã𝑜]desempilha)
10
5
Pilhas (avaliação prefixa)
185
prefixa: / + − 3 1 ∗ 2 4 5
Resultado: 
0…9 : empilhe
+, -, *, /: empilhe(desempilha 
[𝑜𝑝𝑒𝑟𝑎çã𝑜] desempilha)2
Pilhas (avaliação prefixa)
186
prefixa: / + − 3 1 ∗ 2 4 5
Resultado: 2
0…9 : empilhe
+, -, *, /: empilhe(desempilha 
[𝑜𝑝𝑒𝑟𝑎çã𝑜] desempilha)
181 182
183 184
185 186