Você está na página 1de 31

Estruturas de Dados

ESTRUTURAS DE DADOS ◼ Ao implementarmos programas de computador

► Pilhas estamos de certa forma tentando representar o


mundo real pela computação;
(Linguagem C)
◼ Os dados a serem processados no computador
Prof. Dr. Marcelo Duduchi representam uma abstração de parte da realidade na
Aux. Docente Lucio Nunes medida em que representam características
selecionadas das entidades do mundo real;
2

1 2

Estruturas de Dados Estruturas de Dados


◼ A forma segundo a qual os bits são agrupados, interpretados e ◼ Para representar o mundo computacionalmente é necessário
manipulados pelo computador normalmente não nos interessa modelar;
quando a nossa preocupação maior é resolver um problema ◼ É neste particular que o conceito de tipos abstratos de dados passa
específico; a ser muito importante para a computação;
◼ Felizmente, as linguagens atuais oferecem um conjunto básico de ◼ Um tipo abstrato de dados é formado por:
tipos de dados primitivos (inteiros, reais, caractere, booleano etc.)  Um conjunto de valores;
que podemos usar nas soluções de problemas;  Uma série de funções que podem ser aplicadas a estes valores.
◼ Da mesma forma, temos mecanismos que permitem criar ◼ O modelo usado para representar a solução de uma classe de
agrupamentos complexos de dados a partir desses tipos primitivos; problemas podemos chamar de estrutura de dados;

3 4

3 4

Estruturas de Dados Listas Lineares


◼ O estudo das estruturas de dados envolve dois ◼ Uma lista é uma coleção de elementos do mesmo tipo
objetivos básicos: dispostos linearmente que podem ou não seguir uma
 Teórico: Identificar e desenvolver modelos, determinando determinada organização;
que classes de problemas podem resolver;
◼ Exemplo: [E1, E2, E3, ..., En], onde n ≥ 0;
 Prático: Criar representações concretas dos objetivos e
◼ Uma lista de pagamentos pode ser constituída por:
desenvolver sub-rotinas capazes de atuar como
representações. prestação do carro, cartão de crédito, conta de luz,
condomínio, televisão a cabo e prestação do crediário;
5 6

5 6

1
Listas Lineares Pilhas

◼ Para a representação de alguns modelos do ◼ Uma lista linear onde tanto a entrada quanto a saída

mundo real é necessário limitar o funcionamento precisa ser feita pela mesma extremidade é conhecida
como pilha;
das listas lineares;
◼ Neste caso o último elemento que entrar é o primeiro a
◼ É neste contexto que surgem as listas lineares
sair (Last In / First Out);
restritas. As mais utilizadas são:
◼ Existem duas funções que se aplicam a todas as pilhas:
 Pilhas e  PUSH: insere o item no topo da pilha;
 Filas.  POP: remove o item do topo da pilha.
7 8

7 8

Pilhas (modelo conceitual) Pilhas (modelo conceitual)


Novos elementos são Novos elementos são Push
armazenados no topo armazenados no topo
da pilha. da pilha.

9 10

9 10

Pilhas (modelo conceitual) Pilhas (modelo conceitual)


Novos elementos são Novos elementos são Push
armazenados no topo armazenados no topo
da pilha. da pilha.

A A

11 12

11 12

2
Pilhas (modelo conceitual) Pilhas (modelo conceitual)
Novos elementos são Novos elementos são Push
armazenados no topo armazenados no topo
da pilha. da pilha.

B B

A A

13 14

13 14

Pilhas (modelo conceitual) Pilhas (modelo conceitual)


Novos elementos são Novos elementos são Push
armazenados no topo armazenados no topo
da pilha. da pilha.

C C

B B

A A

15 16

15 16

Pilhas (modelo conceitual) Pilhas (modelo conceitual)


Pop O último elemento que
entrou será o primeiro a
sair (LIFO).

Sequência armazenada D
em pilha.
C C

B B

A A

17 18

17 18

3
Pilhas (modelo conceitual) Pilhas (modelo conceitual)
Pop O último elemento que Pop O último elemento que
entrou será o primeiro a entrou será o primeiro a
sair (LIFO). sair (LIFO).

C B

A A

19 20

19 20

Pilhas (modelo conceitual) Pilhas (representação gráfica)


Pop O último elemento que
entrou será o primeiro a
sair (LIFO).

Topo →
A

21 22

21 22

Pilhas (representação gráfica) Pilhas (representação gráfica)


D

Topo →
D
Topo →
push(pilha, 'D')

23 24

23 24

4
Pilhas (representação gráfica) Pilhas (representação gráfica)
D

Topo → Topo → Topo →


D D D
Topo →
pop(pilha)

25 26

25 26

Pilhas (representação gráfica) Pilhas (representação gráfica)

Topo → Topo →
D D
Topo → Topo → Topo →

27 28

27 28

Pilhas (representação gráfica) Pilhas (representação gráfica)


A

Topo → Topo → Topo →


D D A
Topo → Topo → Topo →
push(pilha, 'A')

29 30

29 30

5
Pilhas (representação gráfica) Pilhas (representação gráfica)

Topo → Topo → Topo → Topo →


D A D A
Topo → Topo →

Topo → Topo →
A A

push(pilha, 'V')
31 32

31 32

Pilhas (representação gráfica) Pilhas (representação gráfica)

Topo → Topo → Topo → Topo →


D A D A
Topo → Topo →

Topo → V Topo → V Topo → V


A A A

33 34

33 34

Pilhas (representação gráfica) Pilhas (representação gráfica)

Topo → Topo → Topo → Topo →


D A D A
Topo → Topo →

Topo → V Topo → V
Topo → Topo →
A A A A

pop(pilha)
35 36

35 36

6
Pilhas (representação gráfica) Pilhas (representação gráfica)

Topo → Topo → Topo → Topo →


D A D A
Topo → Topo →

Topo → V Topo → V
Topo → Topo → Topo → Topo →
A A A A A A

push(pilha, 'B')
37 38

37 38

Pilhas (representação gráfica) Pilhas (representação gráfica)

Topo → B
Topo → Topo →
D A A
Topo →

Topo → V Topo → B
Topo →
A A A

39 40

39 40

Pilhas (representação gráfica) Pilhas (representação gráfica)


G

Topo → G
Topo → B B
A A

push(pilha, 'G')

41 42

41 42

7
Pilhas (representação gráfica) Pilhas (representação gráfica)
H

Topo → G Topo → G Topo → G Topo → G


B B B B
A A A A

push(pilha, 'H')

43 44

43 44

Pilhas (representação gráfica) Pilhas (representação gráfica)


Topo → H Topo → H Topo → H
Topo → G G Topo → G G G
B B B B B
A A A A A

45 46

45 46

Pilhas (representação gráfica) Pilhas (representação gráfica)


H

Topo → H Topo → H
Topo → G G Topo → G Topo → G G Topo → G
B B B B B B
A A A A A A

pop(pilha)

47 48

47 48

8
Pilhas (representação gráfica) Pilhas (representação gráfica)
Topo → H Topo → H
Topo → G G Topo → G Topo → G G Topo → G
B B B B B B
A A A A A A

Topo → G
B Topo → B
A A

pop(pilha)
49 50

49 50

Pilhas (representação gráfica) Pilhas (representação gráfica)


Topo → H Topo → H
Topo → G G Topo → G Topo → G G Topo → G
B B B B B B
A A A A A A

Topo → B Topo → B Topo → B


A A A

51 52

51 52

Pilhas (representação gráfica) Pilhas (representação gráfica)


Topo → H Topo → H
Topo → G G Topo → G Topo → G G Topo → G
B B B B B B
A A A A A A

Topo → B Topo → B
Topo → Topo →
A A A A

pop(pilha)
53 54

53 54

9
Pilhas (representação gráfica) Pilhas (representação gráfica)
Topo → H Topo → H
Topo → G G Topo → G Topo → G G Topo → G
B B B B B B
A A A A A A

Topo → B Topo → B
Topo → Topo → Topo →
A A A A A
Topo →
pop(pilha)
55 56

55 56

Pilhas (representação gráfica) Pilhas (implementação)


◼ Consideremos para a nossa implementação um grupo de
Topo → H
Topo → G G Topo → G operações:
B B B
A A A
➢ create → inicializa a pilha
➢ destroy → esvazia a pilha
➢ isfull → verifica se está cheia
➢ isempty → verifica se está vazia
➢ push → insere um elemento
Topo → B ➢ pop → retira um elemento
Topo →
A A
Topo → ➢ top → mostra o elemento do topo

57 58

57 58

Pilhas (definição da estrutura) Pilhas (create, destroy, isfull e isempty)


typedef struct pilha {
char vet[6];
void create(TPilha *p) { void destroy(TPilha *p) {
int topo; p->topo = -1; p->topo = -1;
} TPilha; } }

TPilha
int isfull(TPilha *p) { int isempty(TPilha *p) {
0 1 2 3 4 5 if (p->topo == 5) if (p->topo == -1)
return 1; return 1;
else else
return 0; return 0;
vet topo } }

59 60

59 60

10
Pilhas (isfull e isempty) Pilhas (push e pop)

int isfull(TPilha *p) { char pop(TPilha *p) {


void push(TPilha *p, char x) {
return p->topo == 5; if (isfull(p) {
if (isempty(p)) {
puts("underflow");
puts("overflow");
} abort();
abort();
}
}
char aux = p->vet[p->topo];
p->topo++;
p->topo--;
int isempty(TPilha *p) { }
p->vet[p->topo] = x;
return aux;
}
return p->topo == -1;
}
61 62

61 62

Pilhas (top) Pilhas (1º exemplo de utilização)

char top(TPilha *p) { int main(void) {


if (isempty(p)) { TPilha p;
create(&p);
puts("underflow"); push(&p, 'A');
abort(); push(&p, 'B');
push(&p, 'C');
} printf("%c\n", pop(&p));
return p->vet[p->topo]; printf("%c\n", pop(&p));
return 0;
} }

63 64

63 64

Pilhas (1º exemplo de utilização) Pilhas (1º exemplo de utilização)


A
int main(void) { int main(void) {
TPilha p; TPilha p;
create(&p); create(&p);
push(&p, 'A'); push(&p, 'A');
push(&p, 'B'); push(&p, 'B');
push(&p, 'C'); push(&p, 'C');
printf("%c\n", pop(&p)); printf("%c\n", pop(&p));
printf("%c\n", pop(&p)); printf("%c\n", pop(&p));
return 0; return 0;
} }
A
65 66

65 66

11
Pilhas (1º exemplo de utilização) Pilhas (1º exemplo de utilização)
B
int main(void) { int main(void) {
TPilha p; TPilha p;
create(&p); create(&p);
push(&p, 'A'); push(&p, 'A');
push(&p, 'B'); push(&p, 'B');
push(&p, 'C'); push(&p, 'C');
printf("%c\n", pop(&p)); printf("%c\n", pop(&p));
printf("%c\n", pop(&p)); printf("%c\n", pop(&p)); B
return 0; return 0;
}
A }
A
67 68

67 68

Pilhas (1º exemplo de utilização) Pilhas (1º exemplo de utilização)


C
int main(void) { int main(void) {
TPilha p; TPilha p;
create(&p); create(&p);
push(&p, 'A'); push(&p, 'A');
push(&p, 'B'); push(&p, 'B');
push(&p, 'C'); push(&p, 'C'); C
printf("%c\n", pop(&p)); printf("%c\n", pop(&p));
printf("%c\n", pop(&p)); B printf("%c\n", pop(&p)); B
return 0; return 0;
}
A }
A
69 70

69 70

Pilhas (1º exemplo de utilização) Pilhas (1º exemplo de utilização)


C B
int main(void) { int main(void) {
TPilha p; TPilha p;
create(&p); create(&p);
push(&p, 'A'); push(&p, 'A');
push(&p, 'B'); push(&p, 'B');
push(&p, 'C'); push(&p, 'C');
printf("%c\n", pop(&p)); printf("%c\n", pop(&p));
printf("%c\n", pop(&p)); B printf("%c\n", pop(&p));
return 0; return 0;
}
A }
A
71 72

71 72

12
Pilhas (1º exemplo de utilização) Pilhas (2º exemplo de utilização)
void inverte(char s[]) {
Roma
int main(void) { int i, tam;
TPilha p;
TPilha p;
create(&p);
push(&p, 'A'); create(&p);
push(&p, 'B'); tam = strlen(s);
push(&p, 'C'); for (i = 0; i < tam; i++)
printf("%c\n", pop(&p)); push(&p, s[i]);
printf("%c\n", pop(&p));
for (i = 0; !isempty(&p); i++)
return 0;
}
A s[i] = pop(&p);
}
73 74

73 74

Pilhas (2º exemplo de utilização) Pilhas (2º exemplo de utilização)


void inverte(char s[]) {
Roma void inverte(char s[]) {
Roma
int i, tam; int i, tam;
TPilha p; TPilha p;
create(&p); create(&p);
tam = strlen(s); tam = strlen(s);
for (i = 0; i < tam; i++) for (i = 0; i < tam; i++)
push(&p, s[i]); push(&p, s[i]);
for (i = 0; !isempty(&p); i++) for (i = 0; !isempty(&p); i++) o
s[i] = pop(&p); R s[i] = pop(&p); R
} }
75 76

75 76

Pilhas (2º exemplo de utilização) Pilhas (2º exemplo de utilização)


void inverte(char s[]) {
Roma void inverte(char s[]) {
Roma
int i, tam; int i, tam;
TPilha p; TPilha p;
create(&p); create(&p);
tam = strlen(s); tam = strlen(s); a
for (i = 0; i < tam; i++) for (i = 0; i < tam; i++)
push(&p, s[i]);
m push(&p, s[i]);
m
for (i = 0; !isempty(&p); i++) o for (i = 0; !isempty(&p); i++) o
s[i] = pop(&p); R s[i] = pop(&p); R
} }
77 78

77 78

13
Pilhas (2º exemplo de utilização) Pilhas (2º exemplo de utilização)
void inverte(char s[]) { void inverte(char s[]) {
a
int i, tam; int i, tam;
TPilha p; TPilha p;
create(&p); create(&p);
tam = strlen(s); a tam = strlen(s);
for (i = 0; i < tam; i++) for (i = 0; i < tam; i++)
push(&p, s[i]);
m push(&p, s[i]);
m
for (i = 0; !isempty(&p); i++) o for (i = 0; !isempty(&p); i++) o
s[i] = pop(&p); R s[i] = pop(&p); R
} }
79 80

79 80

Pilhas (2º exemplo de utilização) Pilhas (2º exemplo de utilização)


void inverte(char s[]) {
am void inverte(char s[]) {
amo
int i, tam; int i, tam;
TPilha p; TPilha p;
create(&p); create(&p);
tam = strlen(s); tam = strlen(s);
for (i = 0; i < tam; i++) for (i = 0; i < tam; i++)
push(&p, s[i]); push(&p, s[i]);
for (i = 0; !isempty(&p); i++) o for (i = 0; !isempty(&p); i++)
s[i] = pop(&p); R s[i] = pop(&p); R
} }
81 82

81 82

Pilhas (2º exemplo de utilização) Pilhas (aplicações)


void inverte(char s[]) {
amoR
◼ Pilha de chamada de rotinas:
int i, tam;
TPilha p;
 Caso seja uma chamada, colocar o endereço
create(&p);
tam = strlen(s); da próxima instrução na pilha, executando a
for (i = 0; i < tam; i++) rotina chamada;
push(&p, s[i]);
for (i = 0; !isempty(&p); i++)  Caso seja um “retorne”, retirar um endereço
s[i] = pop(&p); da pilha, passando a executá-lo.
}
83 84

83 84

14
Pilhas (aplicações) Pilhas (aplicações)
Rotina P INSTRUÇÃO ESTADO DA PILHA
Rotina P INSTRUÇÃO ESTADO DA PILHA
e1: A( ); e1: A( );
e0 e0
e2: C( ); e2: C( );
e3: B( ); e3: B( ); e1: A( ); e0
e4: Retorne; e4: Retorne;

Rotina A Rotina A
e5: B( ); e5: B( );
e6: Retorne; e6: Retorne;

Rotina B Rotina B
e7: Retorne; e7: Retorne;

Rotina C Rotina C
e8: Retorne; e8: Retorne;
85 86

85 86

Pilhas (aplicações) Pilhas (aplicações)


Rotina P INSTRUÇÃO ESTADO DA PILHA
Rotina P INSTRUÇÃO ESTADO DA PILHA
e1: A( ); e1: A( );
e0 e0
e2: C( ); e2: C( );
e3: B( ); e1: A( ); e0, e2 e3: B( ); e1: A( ); e0, e2
e4: Retorne; e4: Retorne; e5: B( ); e0, e2

Rotina A Rotina A
e5: B( ); e5: B( );
e6: Retorne; e6: Retorne;

Rotina B Rotina B
e7: Retorne; e7: Retorne;

Rotina C Rotina C
e8: Retorne; e8: Retorne;
87 88

87 88

Pilhas (aplicações) Pilhas (aplicações)


Rotina P INSTRUÇÃO ESTADO DA PILHA
Rotina P INSTRUÇÃO ESTADO DA PILHA
e1: A( ); e1: A( );
e0 e0
e2: C( ); e2: C( );
e3: B( ); e1: A( ); e0, e2 e3: B( ); e1: A( ); e0, e2
e4: Retorne; e5: B( ); e0, e2, e6 e4: Retorne; e5: B( ); e0, e2, e6
e7: Retorne; e0, e2, e6
Rotina A Rotina A
e5: B( ); e5: B( );
e6: Retorne; e6: Retorne;

Rotina B Rotina B
e7: Retorne; e7: Retorne;

Rotina C Rotina C
e8: Retorne; e8: Retorne;
89 90

89 90

15
Pilhas (aplicações) Pilhas (aplicações)
Rotina P INSTRUÇÃO ESTADO DA PILHA
Rotina P INSTRUÇÃO ESTADO DA PILHA
e1: A( ); e1: A( );
e0 e0
e2: C( ); e2: C( );
e3: B( ); e1: A( ); e0, e2 e3: B( ); e1: A( ); e0, e2
e4: Retorne; e5: B( ); e0, e2, e6 e4: Retorne; e5: B( ); e0, e2, e6
e7: Retorne; e0, e2 e7: Retorne; e0, e2
Rotina A e6: Retorne; e0, e2 Rotina A e6: Retorne; e0
e5: B( ); e5: B( );
e2: C( ); e0
e6: Retorne; e6: Retorne;

Rotina B Rotina B
e7: Retorne; e7: Retorne;

Rotina C Rotina C
e8: Retorne; e8: Retorne;
91 92

91 92

Pilhas (aplicações) Pilhas (aplicações)


Rotina P INSTRUÇÃO ESTADO DA PILHA
Rotina P INSTRUÇÃO ESTADO DA PILHA
e1: A( ); e1: A( );
e0 e0
e2: C( ); e2: C( );
e3: B( ); e1: A( ); e0, e2 e3: B( ); e1: A( ); e0, e2
e4: Retorne; e5: B( ); e0, e2, e6 e4: Retorne; e5: B( ); e0, e2, e6
e7: Retorne; e0, e2 e7: Retorne; e0, e2
Rotina A e6: Retorne; e0 Rotina A e6: Retorne; e0
e5: B( ); e5: B( );
e2: C( ); e0, e3 e2: C( ); e0, e3
e6: Retorne; e6: Retorne;
e8: Retorne; e0, e3
Rotina B Rotina B
e7: Retorne; e7: Retorne;

Rotina C Rotina C
e8: Retorne; e8: Retorne;
93 94

93 94

Pilhas (aplicações) Pilhas (aplicações)


Rotina P INSTRUÇÃO ESTADO DA PILHA
Rotina P INSTRUÇÃO ESTADO DA PILHA
e1: A( ); e1: A( );
e0 e0
e2: C( ); e2: C( );
e3: B( ); e1: A( ); e0, e2 e3: B( ); e1: A( ); e0, e2
e4: Retorne; e5: B( ); e0, e2, e6 e4: Retorne; e5: B( ); e0, e2, e6
e7: Retorne; e0, e2 e7: Retorne; e0, e2
Rotina A e6: Retorne; e0 Rotina A e6: Retorne; e0
e5: B( ); e5: B( );
e2: C( ); e0, e3 e2: C( ); e0, e3
e6: Retorne; e6: Retorne;
e8: Retorne; e0 e8: Retorne; e0
Rotina B e3: B( ); e0 Rotina B e3: B( ); e0, e4
e7: Retorne; e7: Retorne;

Rotina C Rotina C
e8: Retorne; e8: Retorne;
95 96

95 96

16
Pilhas (aplicações) Pilhas (aplicações)
Rotina P INSTRUÇÃO ESTADO DA PILHA
Rotina P INSTRUÇÃO ESTADO DA PILHA
e1: A( ); e1: A( );
e0 e0
e2: C( ); e2: C( );
e3: B( ); e1: A( ); e0, e2 e3: B( ); e1: A( ); e0, e2
e4: Retorne; e5: B( ); e0, e2, e6 e4: Retorne; e5: B( ); e0, e2, e6
e7: Retorne; e0, e2 e7: Retorne; e0, e2
Rotina A e6: Retorne; e0 Rotina A e6: Retorne; e0
e5: B( ); e5: B( );
e2: C( ); e0, e3 e2: C( ); e0, e3
e6: Retorne; e6: Retorne;
e8: Retorne; e0 e8: Retorne; e0
Rotina B e3: B( ); e0, e4 Rotina B e3: B( ); e0, e4
e7: Retorne; e7: Retorne; e0, e4 e7: Retorne; e7: Retorne; e0
e4: Retorne; e0
Rotina C Rotina C
e8: Retorne; e8: Retorne;
97 98

97 98

Pilhas (aplicações) Pilhas (infixa -> posfixa)


Rotina P INSTRUÇÃO ESTADO DA PILHA
e1: A( );
e2: C( );
e3: B( ); e1: A( );
e0
e0, e2
Infixa
(((3 − 1) + (2 ∗ 4))/5)
e4: Retorne; e5: B( ); e0, e2, e6
e7: Retorne; e0, e2
Rotina A e6: Retorne; e0
e5: B( );
e2: C( ); e0, e3
e6: Retorne;

Rotina B
e7: Retorne;
e8: Retorne;
e3: B( );
e0
e0, e4 Posfixa
e7: Retorne; e0

Rotina C
e8: Retorne;
e4: Retorne;
e0: [volta p/ S.O.]
e0
31−24∗+5/
99 100

99 100

Pilhas (infixa -> posfixa) Pilhas (infixa -> posfixa)


Infixa: (((3 − 1) + (2 ∗ 4))/5) Infixa: (((3 − 1) + (2 ∗ 4))/5)

Posfixa: Posfixa:

( : ignore ( : ignore
0…9 : anexe à string 0…9 : anexe à string
+, -, *, /: empilhe +, -, *, /: empilhe
) : desempilhe e anexe à string ) : desempilhe e anexe à string

101 102

101 102

17
Pilhas (infixa -> posfixa) Pilhas (infixa -> posfixa)
Infixa: (((3 − 1) + (2 ∗ 4))/5) Infixa: (((3 − 1) + (2 ∗ 4))/5)

Posfixa: Posfixa:

( : ignore ( : ignore
0…9 : anexe à string 0…9 : anexe à string
+, -, *, /: empilhe +, -, *, /: empilhe
) : desempilhe e anexe à string ) : desempilhe e anexe à string

103 104

103 104

Pilhas (infixa -> posfixa) Pilhas (infixa -> posfixa)


Infixa: (((3 − 1) + (2 ∗ 4))/5) Infixa: (((3 − 1) + (2 ∗ 4))/5)

Posfixa: 3 Posfixa: 3

( : ignore ( : ignore
0…9 : anexe à string 0…9 : anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string
− +, -, *, /: empilhe
) : desempilhe e anexe à string

105 106

105 106

Pilhas (infixa -> posfixa) Pilhas (infixa -> posfixa)


Infixa: (((3 − 1) + (2 ∗ 4))/5) Infixa: (((3 − 1) + (2 ∗ 4))/5)

Posfixa: 3 1 Posfixa: 3 1 −

( : ignore ( : ignore
0…9 : anexe à string 0…9 : anexe à string

− +, -, *, /: empilhe
) : desempilhe e anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string

107 108

107 108

18
Pilhas (infixa -> posfixa) Pilhas (infixa -> posfixa)
Infixa: (((3 − 1) + (2 ∗ 4))/5) Infixa: (((3 − 1) + (2 ∗ 4))/5)

Posfixa: 3 1 − Posfixa: 3 1 −

( : ignore ( : ignore
0…9 : anexe à string 0…9 : anexe à string

+ +, -, *, /: empilhe
) : desempilhe e anexe à string
+ +, -, *, /: empilhe
) : desempilhe e anexe à string

109 110

109 110

Pilhas (infixa -> posfixa) Pilhas (infixa -> posfixa)


Infixa: (((3 − 1) + (2 ∗ 4))/5) Infixa: (((3 − 1) + (2 ∗ 4))/5)

Posfixa: 3 1 − 2 Posfixa: 3 1 − 2

(
0…9
: ignore
: anexe à string
∗ (
0…9
: ignore
: anexe à string

+ +, -, *, /: empilhe
) : desempilhe e anexe à string
+ +, -, *, /: empilhe
) : desempilhe e anexe à string

111 112

111 112

Pilhas (infixa -> posfixa) Pilhas (infixa -> posfixa)


Infixa: (((3 − 1) + (2 ∗ 4))/5) Infixa: (((3 − 1) + (2 ∗ 4))/5)

Posfixa: 3 1 − 2 4 Posfixa: 3 1 − 2 4 ∗

∗ (
0…9
: ignore
: anexe à string
(
0…9
: ignore
: anexe à string

+ +, -, *, /: empilhe
) : desempilhe e anexe à string
+ +, -, *, /: empilhe
) : desempilhe e anexe à string

113 114

113 114

19
Pilhas (infixa -> posfixa) Pilhas (infixa -> posfixa)
Infixa: (((3 − 1) + (2 ∗ 4))/5) Infixa: (((3 − 1) + (2 ∗ 4))/5)

Posfixa: 3 1 − 2 4 ∗ + Posfixa: 3 1 − 2 4 ∗ +

( : ignore ( : ignore
0…9 : anexe à string 0…9 : anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string
/ +, -, *, /: empilhe
) : desempilhe e anexe à string

115 116

115 116

Pilhas (infixa -> posfixa) Pilhas (infixa -> posfixa)


Infixa: (((3 − 1) + (2 ∗ 4))/5) Infixa: (((3 − 1) + (2 ∗ 4))/5)

Posfixa: 3 1 − 2 4 ∗ + 5 Posfixa: 3 1 − 2 4 ∗ + 5 /

( : ignore ( : ignore
0…9 : anexe à string 0…9 : anexe à string

/ +, -, *, /: empilhe
) : desempilhe e anexe à string
+, -, *, /: empilhe
) : desempilhe e anexe à string

117 118

117 118

Pilhas (infixa -> prefixa) Pilhas (infixa -> prefixa)


Infixa: (((3 − 1) + (2 ∗ 4))/5)
Infixa
(((3 − 1) + (2 ∗ 4))/5) Prefixa:

) : ignore

Prefixa 0…9 : anexe à string


+, -, *, /: empilhe

/+−31∗245 ( : desempilhe e anexe à string

119 120

119 120

20
Pilhas (infixa -> prefixa) Pilhas (infixa -> prefixa)
Infixa: (((3 − 1) + (2 ∗ 4))/5) Infixa: (((3 − 1) + (2 ∗ 4))/5)

Prefixa: Prefixa: 5

) : ignore ) : ignore
0…9 : anexe à string 0…9 : anexe à string
+, -, *, /: empilhe +, -, *, /: empilhe
( : desempilhe e anexe à string ( : desempilhe e anexe à string

121 122

121 122

Pilhas (infixa -> prefixa) Pilhas (infixa -> prefixa)


Infixa: (((3 − 1) + (2 ∗ 4))/5) Infixa: (((3 − 1) + (2 ∗ 4))/5)

Prefixa: 5 Prefixa: 5

) : ignore ) : ignore
0…9 : anexe à string 0…9 : anexe à string

/ +, -, *, /: empilhe
( : desempilhe e anexe à string
/ +, -, *, /: empilhe
( : desempilhe e anexe à string

123 124

123 124

Pilhas (infixa -> prefixa) Pilhas (infixa -> prefixa)


Infixa: (((3 − 1) + (2 ∗ 4))/5) Infixa: (((3 − 1) + (2 ∗ 4))/5)

Prefixa: 5 Prefixa: 5 4

) : ignore ) : ignore
0…9 : anexe à string 0…9 : anexe à string

/ +, -, *, /: empilhe
( : desempilhe e anexe à string
/ +, -, *, /: empilhe
( : desempilhe e anexe à string

125 126

125 126

21
Pilhas (infixa -> prefixa) Pilhas (infixa -> prefixa)
Infixa: (((3 − 1) + (2 ∗ 4))/5) Infixa: (((3 − 1) + (2 ∗ 4))/5)

Prefixa: 5 4 Prefixa: 5 4 2

∗ )
0…9
: ignore
: anexe à string
∗ )
0…9
: ignore
: anexe à string

/ +, -, *, /: empilhe
( : desempilhe e anexe à string
/ +, -, *, /: empilhe
( : desempilhe e anexe à string

127 128

127 128

Pilhas (infixa -> prefixa) Pilhas (infixa -> prefixa)


Infixa: (((3 − 1) + (2 ∗ 4))/5) Infixa: (((3 − 1) + (2 ∗ 4))/5)

Prefixa: 5 4 2 ∗ Prefixa: 5 4 2 ∗

)
0…9
: ignore
: anexe à string
+ )
0…9
: ignore
: anexe à string

/ +, -, *, /: empilhe
( : desempilhe e anexe à string
/ +, -, *, /: empilhe
( : desempilhe e anexe à string

129 130

129 130

Pilhas (infixa -> prefixa) Pilhas (infixa -> prefixa)


Infixa: (((3 − 1) + (2 ∗ 4))/5) Infixa: (((3 − 1) + (2 ∗ 4))/5)

Prefixa: 5 4 2 ∗ Prefixa: 5 4 2 ∗ 1

+ )
0…9
: ignore
: anexe à string
+ )
0…9
: ignore
: anexe à string

/ +, -, *, /: empilhe
( : desempilhe e anexe à string
/ +, -, *, /: empilhe
( : desempilhe e anexe à string

131 132

131 132

22
Pilhas (infixa -> prefixa) Pilhas (infixa -> prefixa)
Infixa: (((3 − 1) + (2 ∗ 4))/5) Infixa: (((3 − 1) + (2 ∗ 4))/5)

− Prefixa: 5 4 2 ∗ 1
− Prefixa: 5 4 2 ∗ 1 3

+ )
0…9
: ignore
: anexe à string
+ )
0…9
: ignore
: anexe à string

/ +, -, *, /: empilhe
( : desempilhe e anexe à string
/ +, -, *, /: empilhe
( : desempilhe e anexe à string

133 134

133 134

Pilhas (infixa -> prefixa) Pilhas (infixa -> prefixa)


Infixa: (((3 − 1) + (2 ∗ 4))/5) Infixa: (((3 − 1) + (2 ∗ 4))/5)

Prefixa: 5 4 2 ∗ 1 3 − Prefixa: 5 4 2 ∗ 1 3 − +

+ )
0…9
: ignore
: anexe à string
)
0…9
: ignore
: anexe à string

/ +, -, *, /: empilhe
( : desempilhe e anexe à string
/ +, -, *, /: empilhe
( : desempilhe e anexe à string

135 136

135 136

Pilhas (infixa -> prefixa) Pilhas (infixa -> prefixa)


Infixa: (((3 − 1) + (2 ∗ 4))/5) Infixa: (((3 − 1) + (2 ∗ 4))/5)

Prefixa: 5 4 2 ∗ 1 3 − + / Prefixa: / + − 3 1 ∗ 2 4 5

) : ignore ) : ignore
0…9 : anexe à string 0…9 : anexe à string
+, -, *, /: empilhe +, -, *, /: empilhe
( : desempilhe e anexe à string ( : desempilhe e anexe à string

137 138

137 138

23
Pilhas (posfixa -> infixa) Pilhas (posfixa -> infixa)
Posfixa: 3 1 − 2 4 ∗ + 5 /
Posfixa
31−24∗+5/ Infixa:

0…9 : empilhe

Infixa +, -, *, /: 𝑏 recebe desempilha;


empilhe '(' + desempilha +
(((3 − 1) + (2 ∗ 4))/5) [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')'

139 140

139 140

Pilhas (posfixa -> infixa) Pilhas (posfixa -> infixa)


Posfixa: 3 1 − 2 4 ∗ + 5 / Posfixa: 3 1 − 2 4 ∗ + 5 /

Infixa: Infixa:

0…9 : empilhe 0…9 : empilhe


1
+, -, *, /: 𝑏 recebe desempilha; +, -, *, /: 𝑏 recebe desempilha;
3 3
empilhe '(' + desempilha + empilhe '(' + desempilha +
[𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')' [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')'

141 142

141 142

Pilhas (posfixa -> infixa) Pilhas (posfixa -> infixa)


Posfixa: 3 1 − 2 4 ∗ + 5 / Posfixa: 3 1 − 2 4 ∗ + 5 /

Infixa:

0…9 : empilhe 0…9 : empilhe


2
+, -, *, /: 𝑏 recebe desempilha; +, -, *, /: 𝑏 recebe desempilha;
3−1 3−1
empilhe '(' + desempilha + empilhe '(' + desempilha +
[𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')' [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')'

143 144

143 144

24
Pilhas (posfixa -> infixa) Pilhas (posfixa -> infixa)
Posfixa: 3 1 − 2 4 ∗ + 5 / Posfixa: 3 1 − 2 4 ∗ + 5 /

Infixa: Infixa:

4 0…9 : empilhe 0…9 : empilhe


2 2∗4
+, -, *, /: 𝑏 recebe desempilha; +, -, *, /: 𝑏 recebe desempilha;
3−1 3−1
empilhe '(' + desempilha + empilhe '(' + desempilha +
[𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')' [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')'

145 146

145 146

Pilhas (posfixa -> infixa) Pilhas (posfixa -> infixa)


Posfixa: 3 1 − 2 4 ∗ + 5 / Posfixa: 3 1 − 2 4 ∗ + 5 /

Infixa: Infixa:

0…9 : empilhe 0…9 : empilhe


5
+, -, *, /: 𝑏 recebe desempilha; +, -, *, /: 𝑏 recebe desempilha;
((3 − 1) + (2 ∗ 4)) ((3 − 1) + (2 ∗ 4))
empilhe '(' + desempilha + empilhe '(' + desempilha +
[𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')' [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')'

147 148

147 148

Pilhas (posfixa -> infixa) Pilhas (posfixa -> infixa)


Posfixa: 3 1 − 2 4 ∗ + 5 / Posfixa: 3 1 − 2 4 ∗ + 5 /

Infixa: Infixa: (((3 − 1) + (2 ∗ 4))/5)

0…9 : empilhe 0…9 : empilhe


+, -, *, /: 𝑏 recebe desempilha; +, -, *, /: 𝑏 recebe desempilha;
(((3 − 1) + (2 ∗ 4))/5)
empilhe '(' + desempilha + empilhe '(' + desempilha +
[𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')' [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + 𝑏 + ')'

149 150

149 150

25
Pilhas (prefixa -> infixa) Pilhas (prefixa -> infixa)
Prefixa: / + − 3 1 ∗ 2 4 5
Prefixa
Infixa:
/+−31∗245
0…9 : empilhe

Infixa +, -, *, /: empilhe '(' +


desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] +
(((3 − 1) + (2 ∗ 4))/5) desempilha + ')'

151 152

151 152

Pilhas (prefixa -> infixa) Pilhas (prefixa -> infixa)


Prefixa: / + − 3 1 ∗ 2 4 5 Prefixa: / + − 3 1 ∗ 2 4 5

Infixa: Infixa:

0…9 : empilhe 0…9 : empilhe


4
+, -, *, /: empilhe '(' + +, -, *, /: empilhe '(' +
5 5
desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] +
desempilha + ')' desempilha + ')'

153 154

153 154

Pilhas (prefixa -> infixa) Pilhas (prefixa -> infixa)


Prefixa: / + − 3 1 ∗ 2 4 5 Prefixa: / + − 3 1 ∗ 2 4 5

Infixa: Infixa:

2 0…9 : empilhe 0…9 : empilhe


4 (2 ∗ 4)
+, -, *, /: empilhe '(' + +, -, *, /: empilhe '(' +
5 5
desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] +
desempilha + ')' desempilha + ')'

155 156

155 156

26
Pilhas (prefixa -> infixa) Pilhas (prefixa -> infixa)
Prefixa: / + − 3 1 ∗ 2 4 5 Prefixa: / + − 3 1 ∗ 2 4 5

Infixa: Infixa:
3
1 0…9 : empilhe 1 0…9 : empilhe
(2 ∗ 4) (2 ∗ 4)
+, -, *, /: empilhe '(' + +, -, *, /: empilhe '(' +
5 5
desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] +
desempilha + ')' desempilha + ')'

157 158

157 158

Pilhas (prefixa -> infixa) Pilhas (prefixa -> infixa)


Prefixa: / + − 3 1 ∗ 2 4 5 Prefixa: / + − 3 1 ∗ 2 4 5

Infixa: Infixa:

(3 − 1) 0…9 : empilhe 0…9 : empilhe


(2 ∗ 4) ((3 − 1) + (2 ∗ 4))
+, -, *, /: empilhe '(' + +, -, *, /: empilhe '(' +
5 5
desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] +
desempilha + ')' desempilha + ')'

159 160

159 160

Pilhas (prefixa -> infixa) Pilhas (prefixa -> infixa)


Prefixa: / + − 3 1 ∗ 2 4 5 Prefixa: / + − 3 1 ∗ 2 4 5

Infixa: Infixa: (((3 − 1) + (2 ∗ 4))/5)

0…9 : empilhe 0…9 : empilhe


+, -, *, /: empilhe '(' + +, -, *, /: empilhe '(' +
(((3 − 1) + (2 ∗ 4))/5)
desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] + desempilha + [𝑜𝑝𝑒𝑟𝑎𝑑𝑜𝑟] +
desempilha + ')' desempilha + ')'

161 162

161 162

27
Pilhas (avaliação posfixa)
AVALIAÇÃO DE EXPRESSÃO
posfixa: 3 1 − 2 4 ∗ + 5 /

POSFIXA Resultado:

0…9 : empilhe

31−24∗+5/
+, -, *, /: 𝑏 recebe desempilha;
empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)

163 164

163 164

Pilhas (avaliação posfixa) Pilhas (avaliação posfixa)


posfixa: 3 1 − 2 4 ∗ + 5 / posfixa: 3 1 − 2 4 ∗ + 5 /

Resultado: Resultado:

0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha;
1 0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha;

3 empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)
3 empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)

165 166

165 166

Pilhas (avaliação posfixa) Pilhas (avaliação posfixa)


posfixa: 3 1 − 2 4 ∗ + 5 / posfixa: 3 1 − 2 4 ∗ + 5 /

Resultado: Resultado:

0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha;
2 0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha;

2 empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)
2 empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)

167 168

167 168

28
Pilhas (avaliação posfixa) Pilhas (avaliação posfixa)
posfixa: 3 1 − 2 4 ∗ + 5 / posfixa: 3 1 − 2 4 ∗ + 5 /

4 Resultado: Resultado:

2 0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha;
8 0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha;

2 empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)
2 empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)

169 170

169 170

Pilhas (avaliação posfixa) Pilhas (avaliação posfixa)


posfixa: 3 1 − 2 4 ∗ + 5 / posfixa: 3 1 − 2 4 ∗ + 5 /

Resultado: Resultado:

0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha;
5 0…9 : empilhe
+, -, *, /: 𝑏 recebe desempilha;

10 empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)
10 empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)

171 172

171 172

Pilhas (avaliação posfixa) Pilhas (avaliação posfixa)


posfixa: 3 1 − 2 4 ∗ + 5 / posfixa: 3 1 − 2 4 ∗ + 5 /

Resultado: Resultado: 2

0…9 : empilhe 0…9 : empilhe


+, -, *, /: 𝑏 recebe desempilha; +, -, *, /: 𝑏 recebe desempilha;

2 empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)
empilhe(
desempilha [𝑜𝑝𝑒𝑟𝑎çã𝑜] 𝑏)

173 174

173 174

29
Pilhas (avaliação prefixa)
AVALIAÇÃO DE EXPRESSÃO
prefixa: / + − 3 1 ∗ 2 4 5

PREFIXA Resultado:

0…9 : empilhe
+, -, *, /: empilhe(desempilha

/+−31∗245 [𝑜𝑝𝑒𝑟𝑎çã𝑜] desempilha)

175 176

175 176

Pilhas (avaliação prefixa) Pilhas (avaliação prefixa)


prefixa: / + − 3 1 ∗ 2 4 5 prefixa: / + − 3 1 ∗ 2 4 5

Resultado: Resultado:

0…9 : empilhe 0…9 : empilhe


+, -, *, /: empilhe(desempilha 4 +, -, *, /: empilhe(desempilha
[𝑜𝑝𝑒𝑟𝑎çã𝑜] desempilha) [𝑜𝑝𝑒𝑟𝑎çã𝑜] desempilha)
5 5
177 178

177 178

Pilhas (avaliação prefixa) Pilhas (avaliação prefixa)


prefixa: / + − 3 1 ∗ 2 4 5 prefixa: / + − 3 1 ∗ 2 4 5

Resultado: Resultado:

2 0…9 : empilhe 0…9 : empilhe


4 +, -, *, /: empilhe(desempilha 8 +, -, *, /: empilhe(desempilha
[𝑜𝑝𝑒𝑟𝑎çã𝑜] desempilha) [𝑜𝑝𝑒𝑟𝑎çã𝑜] desempilha)
5 5
179 180

179 180

30
Pilhas (avaliação prefixa) Pilhas (avaliação prefixa)
prefixa: / + − 3 1 ∗ 2 4 5 prefixa: / + − 3 1 ∗ 2 4 5

Resultado: 3 Resultado:

1 0…9 : empilhe
1 0…9 : empilhe
8 +, -, *, /: empilhe(desempilha 8 +, -, *, /: empilhe(desempilha
[𝑜𝑝𝑒𝑟𝑎çã𝑜] desempilha) [𝑜𝑝𝑒𝑟𝑎çã𝑜] desempilha)
5 5
181 182

181 182

Pilhas (avaliação prefixa) Pilhas (avaliação prefixa)


prefixa: / + − 3 1 ∗ 2 4 5 prefixa: / + − 3 1 ∗ 2 4 5

Resultado: Resultado:

2 0…9 : empilhe 0…9 : empilhe


8 +, -, *, /: empilhe(desempilha 10 +, -, *, /: empilhe(desempilha
[𝑜𝑝𝑒𝑟𝑎çã𝑜] desempilha) [𝑜𝑝𝑒𝑟𝑎çã𝑜] desempilha)
5 5
183 184

183 184

Pilhas (avaliação prefixa) Pilhas (avaliação prefixa)


prefixa: / + − 3 1 ∗ 2 4 5 prefixa: / + − 3 1 ∗ 2 4 5

Resultado: Resultado: 2

0…9 : empilhe 0…9 : empilhe


+, -, *, /: empilhe(desempilha +, -, *, /: empilhe(desempilha
[𝑜𝑝𝑒𝑟𝑎çã𝑜] desempilha) [𝑜𝑝𝑒𝑟𝑎çã𝑜] desempilha)
2
185 186

185 186

31

Você também pode gostar