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