![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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/2.jpg)
� É 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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/3.jpg)
� 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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/4.jpg)
� 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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/9.jpg)
� 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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/17.jpg)
� 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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/19.jpg)
� 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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/27.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/29.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/30.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/31.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/32.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/33.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/34.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/35.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/36.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/37.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/38.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/39.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/40.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/41.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/42.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/43.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/44.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/45.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/46.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/47.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/48.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/49.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/50.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/51.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/52.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/53.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/54.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/55.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/56.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/57.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/58.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/59.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/60.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/61.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/62.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/63.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/64.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/65.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/66.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/67.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/68.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/69.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/70.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/71.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/72.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/73.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/74.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/75.jpg)
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](https://reader033.vdocuments.mx/reader033/viewer/2022050508/5f992d15476c2625602ca216/html5/thumbnails/76.jpg)
� 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.