76
Prof. Jesus José de Oliveira Neto

Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

Prof. Jesus José de Oliveira Neto

Page 2: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

� É uma das estruturas de dados mais simples

� A idéia fundamental da pilha é que todo o acesso a seus elementos é feito através do seu topo.

� Assim, quando um elemento novo é introduzido na pilha, passa a ser o elemento do topo, e o único elemento que pode ser removido da pilha é o do topo.

Page 3: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

� Verificação de parênteses.

� Retirada de vagões de um trem.

� Retirada de mercadorias em um caminhão de entregas.

Page 4: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

� Os elementos da pilha são retirados na ordem inversa à ordem em que foram introduzidos: o primeiro que sai é o último que entrou (LIFO – last in, first out).

� Existem duas operações básicas que devem ser implementadas numa estrutura de pilha: ◦ operação para empilhar (push) um novo elemento,

inserindo-o no topo, ◦ operação para desempilhar (pop) um elemento,

removendo-o do topo

Page 5: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

topo

push(a)

k

m

x

a

push(b)

b

Page 6: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

topo

k

m

x

topo

k

m

x

a

topo

k

m

x

a

b

push(a) push(b)

Page 7: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

topo

pop(b)

k

m

x

a

pop(a)

b

Page 8: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

k

m

x

topo

topo

k

m

x

topo

k

m

x

aa

b

pop(b) pop(a)

Page 9: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

� Supondo a pilha está armazenada em um vetor pilha[0..n-1].

� A parte do vetor ocupada pela pilha será:

0 t n-1

pilha[0..n-1]

Page 10: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

public class Pilha {

static final int MAX = 50;

//Elementos adicionadosstatic int tamanho; static double vet[] = new double[MAX];...

}

public class Pilha {

static final int MAX = 50;

//Elementos adicionadosstatic int tamanho; static double vet[] = new double[MAX];...

}

Page 11: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

static void push(double v){

if(pilhaEstaCheia()){System.out.println(“Pilha Cheia.”);System.exit(1); /*aborta programa*/

}/* insere elemento na próxima posição livre */vet[tamanho] = v;tamanho++;

}

static void push(double v){

if(pilhaEstaCheia()){System.out.println(“Pilha Cheia.”);System.exit(1); /*aborta programa*/

}/* insere elemento na próxima posição livre */vet[tamanho] = v;tamanho++;

}

Page 12: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

static double pop(){

double v;if (pilhaEstaVazia()) {

System.out.println("Pilha vazia.");System.exit(1); /*aborta programa*/

}/*retira elemento do topo*/v = vet[tamanho-1];tamanho--;return v;

}

static double pop(){

double v;if (pilhaEstaVazia()) {

System.out.println("Pilha vazia.");System.exit(1); /*aborta programa*/

}/*retira elemento do topo*/v = vet[tamanho-1];tamanho--;return v;

}

Page 13: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

Prof. Adriano Teixeira de Souza

static void imprime() {

int i;

for (i=tamanho-1; i>=0; i--){

System.out.println(vet[i]);}

}

static void imprime() {

int i;

for (i=tamanho-1; i>=0; i--){

System.out.println(vet[i]);}

}

Page 14: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

static boolean pilhaEstaVazia(){

return tamanho == 0;}

static boolean pilhaEstaVazia(){

return tamanho == 0;}

Page 15: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

static boolean pilhaEstaCheia(){

return tamanho == MAX;}

static boolean pilhaEstaCheia(){

return tamanho == MAX;}

Page 16: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

public static void main(String[] args) {

push(p,20.0f);push(p,20.8f);push(p,20.3f);push(p,44.5f);push(p,33.3f);push(p,20.9f);imprime();System.out.println("Retirado: "+ pop());System.out.println("Retirado: "+ pop());System.out.println("Configuracao da fila:“);imprime();

}

public static void main(String[] args) {

push(p,20.0f);push(p,20.8f);push(p,20.3f);push(p,44.5f);push(p,33.3f);push(p,20.9f);imprime();System.out.println("Retirado: "+ pop());System.out.println("Retirado: "+ pop());System.out.println("Configuracao da fila:“);imprime();

}

Page 17: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

� Quando o número máximo de elementos que serão armazenados na pilha não é conhecido, devemos implementar a pilha usando uma estrutura de dados dinâmica, no caso, empregando uma lista encadeada.

� Os elementos são armazenados na lista e a pilha pode ser representada simplesmente por um ponteiro para o primeiro nó da lista.

Page 18: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

public class NoPilha {

double info;NoPilha proximo;...

}

public class PilhaDinamica{

NoPilha topo;...

}

public class NoPilha {

double info;NoPilha proximo;...

}

public class PilhaDinamica{

NoPilha topo;...

}

Page 19: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

� Criar uma estrutura de pilha;� Inserir um elemento no topo (push);� Remover o elemento do topo (pop);� Verificar se a pilha está vazia;� Liberar a estrutura de pilha

Page 20: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

public PilhaDinamica(){

this.topo = null;}

public PilhaDinamica(){

this.topo = null;}

Page 21: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

public void push(double valor){

NoPilha aux = new NoPilha(valor);aux.proximo = topo;topo = aux;

}

public void push(double valor){

NoPilha aux = new NoPilha(valor);aux.proximo = topo;topo = aux;

}

Page 22: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

public double pop(){

double valor;NoPilha aux;if (pilhaEstaVazia()) {

System.out.println("Pilha vazia.");System.exit(1); /*aborta o programa*/

}valor = topo.info;aux = topo;topo = aux.proximo;return valor;

}

public double pop(){

double valor;NoPilha aux;if (pilhaEstaVazia()) {

System.out.println("Pilha vazia.");System.exit(1); /*aborta o programa*/

}valor = topo.info;aux = topo;topo = aux.proximo;return valor;

}

Page 23: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

public boolean pilhaEstaVazia(){

return (topo == null);}

public boolean pilhaEstaVazia(){

return (topo == null);}

Page 24: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

public void imprime() {

for(NoPilha q=topo;q!=null;q=q.proximo){

System.out.println(q.info);}

}

public void imprime() {

for(NoPilha q=topo;q!=null;q=q.proximo){

System.out.println(q.info);}

}

Page 25: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

public static void main(String[] args) {PilhaDinamica p = new PilhaDinamica();p.push(20.0);p.push(20.8);p.push(20.3);p.push(44.5);p.push(33.3);p.push(20.9);p.imprime();System.out.println("Retirado: "+ p.pop());System.out.println("Retirado: "+ p.pop());System.out.println("Configuracao da pilha:\n");p.imprime();

// libera memóriap = null;

}

public static void main(String[] args) {PilhaDinamica p = new PilhaDinamica();p.push(20.0);p.push(20.8);p.push(20.3);p.push(44.5);p.push(33.3);p.push(20.9);p.imprime();System.out.println("Retirado: "+ p.pop());System.out.println("Retirado: "+ p.pop());System.out.println("Configuracao da pilha:\n");p.imprime();

// libera memóriap = null;

}

Page 26: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

26

◦ Método para verificar expressões matemáticas:

� Considerando cadeias de caracteres com expressões matemáticas que podem conter termos entre parênteses, colchetes ou chaves, ou seja, entre os caracteres '(' e ')', ou '[' e ']', ou '{' e '}';

� O método retorna true, se os parênteses, colchetes e chaves de uma expressão aritmética são abertos e fechados corretamente, ou false caso contrário;

� Para a expressão "2*{3+4*(2+5*[2+3])}" o método deve retornar true;

� Para a expressão "2*(3+4+{5*[2+3}])" o método deve retornar false ;

Page 27: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

27

◦ A estratégia para resolver esse problema é percorrer a expressão da esquerda para a direita: � Se encontra '(', '[' ou '{', empilha; � Se encontra ')', ']' ou '}', desempilha e verifica o elemento no

topo da pilha, que deve ser o caractere correspondente; � Ao final, a pilha deve estar vazia.

◦ Protótipo:

public boolean verifica(String exp)public boolean verifica(String exp)

Page 28: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

28

public char fecho(char c) {

if(c == '}') return '{';

if(c == ']') return '[';

if(c == ')') return '(';

return ' ';}

… // continua

public char fecho(char c) {

if(c == '}') return '{';

if(c == ']') return '[';

if(c == ')') return '(';

return ' ';}

… // continua

Page 29: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

29

…public boolean verifica(String exp) {

char caractere;

for(int i = 0; i < exp.length(); i++){

if(exp.charAt(i) == '{' ||exp.charAt(i) == '[' ||exp.charAt(i) == '(')

{caractere = exp.charAt(i);

push(caractere);} … // continua

…public boolean verifica(String exp) {

char caractere;

for(int i = 0; i < exp.length(); i++){

if(exp.charAt(i) == '{' ||exp.charAt(i) == '[' ||exp.charAt(i) == '(')

{caractere = exp.charAt(i);

push(caractere);} … // continua

Page 30: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

30

… // continuaelse if(exp.charAt(i) == '}' ||

exp.charAt(i) == ']' ||exp.charAt(i) == ')')

{if(pilhaEstaVazia())

return false;

caractere = pop();

if(caractere!=fecho(exp.charAt(i)) ) return false;

}}

if(!pilhaEstaVazia()) return false;return true;

}

… // continuaelse if(exp.charAt(i) == '}' ||

exp.charAt(i) == ']' ||exp.charAt(i) == ')')

{if(pilhaEstaVazia())

return false;

caractere = pop();

if(caractere!=fecho(exp.charAt(i)) ) return false;

}}

if(!pilhaEstaVazia()) return false;return true;

}

Page 31: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

31

� Avaliação de expressões◦ Expressão: composta de operadores, operandos e

delimitadores (parênteses).◦ Problema existente na avaliação: determinar em que

ordem as operações devem ser realizadas, ou seja, determinar a prioridade dos operadores.◦ Notação convencional: infixa (operador entre

operandos).� Ex.: (A+B)◦ Outras notações: pós-fixa, pré-fixa.

Page 32: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

32

� Os prefixos "pre", "pos" e "in" referem-se à posição relativa do operador em relação aos dois operandos:◦ Na notação prefixa, o operador precede os dois

operandos

◦ Na notação posfixa, o operador é introduzido depois dos dois operandos e,

◦ Na notação infixa, o operador aparece entre os dois operandos

Page 33: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

33

Page 34: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

34

� Vantagens das notações pós-fixa, pré-fixa◦ não precisam de parênteses◦ não existe preocupação com prioridade de operandos

� Vantagens da notação pós-fixa◦ facilidade de avaliação: a expressão pode ser avaliada da

esquerda para direita empilhando operandos, desempilhando operandos quando um operador é encontrado, calculando expressão dependendo do operador e também empilhando o resultado na pilha.

Page 35: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

35

� Converter a expressão infixa A + B * C para posfixa:◦ Saber quais das operações (+ ou *) deve ser efetuada

primeiro

◦ Como a expressão não utiliza parênteses a multiplicação deve ser efetuada primeiro

Page 36: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

36

� Regras a se lembrar ao converter de um tipo para outro:◦ As operações com a precedência mais alta são

convertidas em primeiro lugar◦ Depois de uma parte da expressão ter sido convertida

para posfixa, ela deve ser tratada como um único operando. ◦ Observe o mesmo exemplo com a precedência de

operadores invertida pela inserção de parênteses.

Page 37: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

37

� Segue abaixo a ordem de precedência (da superior para a inferior) para esses operadores binários:◦ exponenciação◦ multiplicação/divisão◦ adição/subtração

� Quando operadores sem parênteses e da mesma ordem de precedência são avaliados, pressupõe-se a ordem da esquerda para a direita exceto,

Page 38: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

38

� No caso da exponenciação, em que a ordem é supostamente da direita para a esquerda. Sendo assim:◦ A + B + C significa (A + B) + C, ◦ Enquanto A ^ B ^ C significa A ^ (B ^ C)

� Outros exemplos de expressão infixa e posfixa

Page 39: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

39

� Para chegar a esse algoritmo, observamos que a ordem dos operandos não é alterada quando a expressão é convertida: eles são copiados para a saída logo que encontrados

� Por outro lado os operadores devem mudar de ordem, já que na posfixa eles aparecem logo depois dos seus operandos

� Numa expressão posfixa, as operações são efetuadas na ordem em que aparecem. Logo, o que determina a posição de um operador é a prioridade que ele tem na forma infixa

� Aqueles operadores de maior precedência aparecem primeiro na expressão de saída e seu escopo será definido por parênteses

Page 40: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

40

� Realize uma varredura na expressão infixa◦ Ao encontrar um operando, copie na expressão de saída◦ Ao encontrar o operador

� Enquanto a pilha não estiver vazia e houver no seu topo um operador com prioridade maior ou igual ao encontrado, desempilhe o operador e copie-o na saída

� Empilhe o operador encontrado

◦ Ao encontrar um parêntese de abertura, empilhe-o◦ Ao encontrar uma parêntese de fechamento, remova os símbolos

da pilha e copie-os na saída até que seja desempilhado o parêntese de abertura correspondente

� Ao final da varredura, esvazie a pilha, copiando os símbolos desempilhados para a saída

Page 41: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

41

infixa

pós-fixa

( a + b - c ) * d – ( e + f )

Pilha

Page 42: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

42

infixa

pós-fixa

a + b - c ) * d – ( e + f )

(

Pilha

Page 43: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

43

infixa

pós-fixa

+ b - c ) * d – ( e + f )

(

a

Pilha

Page 44: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

44

infixa

pós-fixa

b - c ) * d – ( e + f )

(

a

+

Pilha

Conversão da forma infixa para pós-fixa

Page 45: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

45

infixa

pós-fixa

- c ) * d – ( e + f )

(

a b

+

Pilha

Page 46: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

46

infixa

pós-fixa

c ) * d – ( e + f )

(

a b +

-

Pilha

Page 47: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

47

infixa

pós-fixa

) * d – ( e + f )

(

a b + c

-

Pilha

Page 48: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

48

infixa

pós-fixa

* d – ( e + f )

a b + c -

Pilha

Page 49: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

49

infixa

pós-fixa

d – ( e + f )

a b + c -

*

Pilha

Page 50: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

50

infixa

pós-fixa

– ( e + f )

a b + c - d

*

Pilha

Page 51: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

51

infixa

pós-fixa

( e + f )

a b + c – d *

-

Pilha

Page 52: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

52

infixa

pós-fixa

e + f )

a b + c – d *

-

(

Pilha

Page 53: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

53

infixa

pós-fixa

+ f )

a b + c – d * e

-

(

Pilha

Page 54: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

54

infixa

pós-fixa

f )

a b + c – d * e

-

(

+

Pilha

Page 55: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

55

infixa

pós-fixa

)

a b + c – d * e f

-

(

+

Pilha

Page 56: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

56

infixa

pós-fixa

a b + c – d * e f +

-

Pilha

Page 57: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

57

infixa

pós-fixa

a b + c – d * e f + -

Pilha

Page 58: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

58

infixa

pós-fixa

( a + b * c ) * d – ( e + f )

Pilha

Page 59: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

59

infixa

pós-fixa

a + b * c ) * d – ( e + f )

(

Pilha

Page 60: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

60

infixa

pós-fixa

+ b * c ) * d – ( e + f )

(

a

Pilha

Page 61: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

61

infixa

pós-fixa

b * c ) * d – ( e + f )

(

a

+

Pilha

Page 62: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

62

infixa

pós-fixa

* c ) * d – ( e + f )

(

a b

+

Pilha

Page 63: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

63

infixa

pós-fixa

c ) * d – ( e + f )

(

a b

+

Pilha

*

Page 64: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

64

infixa

pós-fixa

) * d – ( e + f )

(

a b c

+

Pilha

*

Page 65: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

65

infixa

pós-fixa

) * d – ( e + f )

(

a b c *

+

Pilha

Page 66: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

66

infixa

pós-fixa

* d – ( e + f )

a b c * +

Pilha

Page 67: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

67

infixa

pós-fixa

d – ( e + f )

a b c * +

*

Pilha

Page 68: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

68

infixa

pós-fixa

– ( e + f )

a b c * + d

*

Pilha

Page 69: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

69

infixa

pós-fixa

( e + f )

a b c * + d *

-

Pilha

Page 70: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

70

infixa

pós-fixa

e + f )

a b c * + d *

-

(

Pilha

Page 71: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

71

infixa

pós-fixa

+ f )

a b c * + d * e

-

(

Pilha

Page 72: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

72

infixa

pós-fixa

f )

a b c * + d * e

-

(

+

Pilha

Page 73: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

73

infixa

pós-fixa

)

a b c * + d * e f

-

(

+

Pilha

Page 74: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

74

infixa

pós-fixa

a b c * + d * e f +

-

Pilha

Page 75: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

75

infixa

pós-fixa

a b c * + d * e f + -

Pilha

Page 76: Prof. Jesus José de Oliveira Neto - Professorprofessor.pucgoias.edu.br/SiteDocente/admin/arquivosUpload/1751… · empregando uma lista encadeada. Os elementos são armazenados na

� Utilizando o algoritmo anteriormente apresentado implemente um programa que insira dados em uma pilha A e em seguida remova-os elementos da pilha A e insira-os na pilha B com sua ordem invertida.