SlideShare uma empresa Scribd logo
1 de 10
Estrutura de
Dados
Lista Simplesmente Encadeada
Pilha NPR
profa. Divani Barbosa
Aula 10 parte 1
Pilha como Lista Encadeada
Política de escalonamento LIFO
Cada elemento possui um elo (endereço)
para outro elemento.
●
●
●
●
null
topo →
Elemento ou Nó para Pilha:
class No {
public int item;
public No ant;
}
Fonte: http://www.ime.usp.br/~pf/algoritmos/aulas/lista.html
Elo para
outro Nó
Classe para Pilha Encadeada de int
class PilhaSE {
private No topo;
public PilhaSE() { topo = null; }
public boolean empty() { return (topo == null); }
public int top() { return topo.item; }
public void pop() { if (!empty()) topo = topo.ant; }
public void push(int valor) {
No novo = new No(); // Aloca memoria para novo Nó
novo.item = valor;
novo.ant = topo;
topo = novo;
}
} // fim classe Pilha como Lista Encadeada
Exemplo: Aplicação de Pilha
Notação infixa e pós-fixa
Considere a seguinte expressão:
(5 + 9) * 2 + 6 * 5
Se as operações não forem realizadas na ordem correta, obteremos o
resultado errado.
Essa expressão foi escrita na notação matemática usual. Essa notação
é chamada infixa. Uma das característica da notação infixa é que a
ordem das operações é determinada pela precedência do operador,
quando a ordem das operações requerem uma precedência diferente,
usamos os parênteses. Uma expressão entre parênteses é avaliada
primeiro.
Um matemático polonês Lukasiewicz apresentou uma alternativa para
essa notação que não necessita da utilização dos parênteses e não
requer uma procedência de operadores.
Notação Pós-fixa ou
Polonesa Reversa (NPR)
Essa notação é chamada de pós-fixa pois os operadores estão depois
dos operandos. Ela não faz uso de parênteses e não requer
precedência de operadores.
Infixa: (5 + 9) * 2 + 6 * 5
Pós-fixa: 5 9 + 2 * 6 5 * +
infixa pós-fixa
a-b ab-
a-b*c abc*-
(a-b)*c ab-c*
a+b*c^d-e abcd^*+e-
a*(b+c)*(d-g)*h abc+*dg-*h*
a*b-c*d^e/f+g*h ab*cde^*f/-gh*+
Exemplos:
O valor de uma notação pos-fixa pode ser calculada facilmente
com ajuda de uma pilha.
Pós-fixa: 5 9 + 2 * 6 5 * +
Calculadora pos-fixa NPR
import java.io.*;
import java.lang.*;
class No {
public int item; // conteúdo da pilha inteiro
public No ant;
}
class PilhaSE { // pilha de operandos inteiros
private No topo;
public PilhaSE() { topo = null; }
public boolean empty() { return (topo == null); }
public int top() { return topo.item; }
public void pop() { if (!empty()) topo = topo.ant; }
public void push(int valor) {
No novo = new No();
novo.item = valor;
novo.ant = topo;
topo = novo;
}
}
// Continua ...
// Continuação ...
class PilhaNPR {
public static void main(String[] args) throws IOException {
PilhaSE p = new PilhaSE();
int arg1, arg2;
char c;
System.out.println("Calculadora notação pos-fixa NPR");
System.out.println(" Exemplo de uso:n 5 9 + 2 * 6 5 * + ");
System.out.print("Informe sua expressao:n ");
String s = lerStr();
for (int i=0; i<s.length(); i++) {
c = s.charAt(i); // lendo caracter por caracter da string s
if (Character.isDigit(c)) // se caracter é numero
p.push(Character.digit(c,10)); // transforme char em int e adicione
// na pilha
else if(c=='+') {
arg1 = p.top(); p.pop();
arg2 = p.top(); p.pop();
p.push(arg1+arg2);
}
else if(c=='*') {
arg1 = p.top(); p.pop();
arg2 = p.top(); p.pop();
p.push(arg1*arg2);
} // Continua ...
// Continuação ...
else if(c=='-') {
arg1 = p.top(); p.pop();
arg2 = p.top(); p.pop();
p.push(arg1-arg2);
}
else if(c=='/') {
arg1 = p.top(); p.pop();
arg2 = p.top(); p.pop();
p.push(arg1/arg2);
}
else if(c=='^') {
arg1 = p.top(); p.pop();
arg2 = p.top(); p.pop();
p.push((int) Math.pow(arg1,arg2));
}
}
System.out.println("Resposta = " + p.top()); // Imprimindo calculo final
p.pop();
} // fim programa principal
public static String lerStr() throws IOException { // função para ler string
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
return br.readLine();
} // fim função ler string
} // fim classe principal
Atividade
1. Melhore a calculadora pós-fixa NPR incluindo as
seguintes funcionalidades:
(a) Adicione um método clear que esvazie a pilha.
(b) Adicione um método print que imprima o conteúdo da
pilha de operandos.
(c) Faça um menu para o usuário como se fosse uma
calculadora
2. Projete um programa usando pilha que transforme
uma expressão infixa em pós-fixa.

Mais conteúdo relacionado

Mais procurados

introduction to visual basic PPT.pptx
introduction to visual basic PPT.pptxintroduction to visual basic PPT.pptx
introduction to visual basic PPT.pptxclassall
 
Aula 02 - Escolha caso
Aula 02 - Escolha casoAula 02 - Escolha caso
Aula 02 - Escolha casoEder Samaniego
 
[Curso Java Basico] Exercicios Aulas 28 a 33
[Curso Java Basico] Exercicios Aulas 28 a 33[Curso Java Basico] Exercicios Aulas 28 a 33
[Curso Java Basico] Exercicios Aulas 28 a 33Loiane Groner
 
Dynamic memory allocation in c++
Dynamic memory allocation in c++Dynamic memory allocation in c++
Dynamic memory allocation in c++Tech_MX
 
[Curso Java Basico] Exercicios Aula 36
[Curso Java Basico] Exercicios Aula 36[Curso Java Basico] Exercicios Aula 36
[Curso Java Basico] Exercicios Aula 36Loiane Groner
 
[Curso Java Basico] Exercicios Aula 24
[Curso Java Basico] Exercicios Aula 24[Curso Java Basico] Exercicios Aula 24
[Curso Java Basico] Exercicios Aula 24Loiane Groner
 
android activity
android activityandroid activity
android activityDeepa Rani
 
[Curso Java Basico] Exercicios Aulas 36 a 43
[Curso Java Basico] Exercicios Aulas 36 a 43[Curso Java Basico] Exercicios Aulas 36 a 43
[Curso Java Basico] Exercicios Aulas 36 a 43Loiane Groner
 
[Curso Java Basico] Exercicios Aulas 16 17
[Curso Java Basico] Exercicios Aulas 16 17[Curso Java Basico] Exercicios Aulas 16 17
[Curso Java Basico] Exercicios Aulas 16 17Loiane Groner
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)Armando Daniel
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 
[Curso Java Basico] Exercicios Aula 20
[Curso Java Basico] Exercicios Aula 20[Curso Java Basico] Exercicios Aula 20
[Curso Java Basico] Exercicios Aula 20Loiane Groner
 
ORM: Object-relational mapping
ORM: Object-relational mappingORM: Object-relational mapping
ORM: Object-relational mappingAbhilash M A
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com AngularElmano Cavalcanti
 
Intro to functional programming
Intro to functional programmingIntro to functional programming
Intro to functional programmingAssaf Gannon
 

Mais procurados (20)

introduction to visual basic PPT.pptx
introduction to visual basic PPT.pptxintroduction to visual basic PPT.pptx
introduction to visual basic PPT.pptx
 
Aula 02 - Escolha caso
Aula 02 - Escolha casoAula 02 - Escolha caso
Aula 02 - Escolha caso
 
[Curso Java Basico] Exercicios Aulas 28 a 33
[Curso Java Basico] Exercicios Aulas 28 a 33[Curso Java Basico] Exercicios Aulas 28 a 33
[Curso Java Basico] Exercicios Aulas 28 a 33
 
Dynamic memory allocation in c++
Dynamic memory allocation in c++Dynamic memory allocation in c++
Dynamic memory allocation in c++
 
[Curso Java Basico] Exercicios Aula 36
[Curso Java Basico] Exercicios Aula 36[Curso Java Basico] Exercicios Aula 36
[Curso Java Basico] Exercicios Aula 36
 
[Curso Java Basico] Exercicios Aula 24
[Curso Java Basico] Exercicios Aula 24[Curso Java Basico] Exercicios Aula 24
[Curso Java Basico] Exercicios Aula 24
 
Vb.net tutorial
Vb.net tutorialVb.net tutorial
Vb.net tutorial
 
Constructor in java
Constructor in javaConstructor in java
Constructor in java
 
concept of oops
concept of oopsconcept of oops
concept of oops
 
android activity
android activityandroid activity
android activity
 
[Curso Java Basico] Exercicios Aulas 36 a 43
[Curso Java Basico] Exercicios Aulas 36 a 43[Curso Java Basico] Exercicios Aulas 36 a 43
[Curso Java Basico] Exercicios Aulas 36 a 43
 
[Curso Java Basico] Exercicios Aulas 16 17
[Curso Java Basico] Exercicios Aulas 16 17[Curso Java Basico] Exercicios Aulas 16 17
[Curso Java Basico] Exercicios Aulas 16 17
 
Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)
 
Operators in java
Operators in javaOperators in java
Operators in java
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
[Curso Java Basico] Exercicios Aula 20
[Curso Java Basico] Exercicios Aula 20[Curso Java Basico] Exercicios Aula 20
[Curso Java Basico] Exercicios Aula 20
 
ORM: Object-relational mapping
ORM: Object-relational mappingORM: Object-relational mapping
ORM: Object-relational mapping
 
Introdução à Programação Web com Angular
Introdução à Programação Web com AngularIntrodução à Programação Web com Angular
Introdução à Programação Web com Angular
 
Android adapters
Android adaptersAndroid adapters
Android adapters
 
Intro to functional programming
Intro to functional programmingIntro to functional programming
Intro to functional programming
 

Semelhante a Aula14 (20)

Pilha e Fila Estática
Pilha e Fila EstáticaPilha e Fila Estática
Pilha e Fila Estática
 
6 alocacao sequencial - pilhas
6   alocacao sequencial - pilhas6   alocacao sequencial - pilhas
6 alocacao sequencial - pilhas
 
Aula 8
Aula 8Aula 8
Aula 8
 
RevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptxRevisãoCompactaFuncoesPonteiro.pptx
RevisãoCompactaFuncoesPonteiro.pptx
 
Pilha ad
Pilha adPilha ad
Pilha ad
 
Pilhas e filas
Pilhas e filasPilhas e filas
Pilhas e filas
 
aula de cálculo pdf atualizado 2023 funções
aula de cálculo pdf atualizado 2023 funçõesaula de cálculo pdf atualizado 2023 funções
aula de cálculo pdf atualizado 2023 funções
 
Função malloc
Função mallocFunção malloc
Função malloc
 
Aula17
Aula17Aula17
Aula17
 
2 funcoes e estrutura de blocos
2   funcoes e estrutura de blocos2   funcoes e estrutura de blocos
2 funcoes e estrutura de blocos
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
9 structs e ponteiros
9   structs e ponteiros9   structs e ponteiros
9 structs e ponteiros
 
Pilha em C
Pilha em CPilha em C
Pilha em C
 
Gabarito funcoes
Gabarito funcoesGabarito funcoes
Gabarito funcoes
 
Árvore Binária em C
Árvore Binária em CÁrvore Binária em C
Árvore Binária em C
 
Programando Melhor - Flisol
Programando Melhor - FlisolProgramando Melhor - Flisol
Programando Melhor - Flisol
 
Conhecendo ou relembrando C
Conhecendo ou relembrando CConhecendo ou relembrando C
Conhecendo ou relembrando C
 
Filas encadeadas
Filas encadeadasFilas encadeadas
Filas encadeadas
 
Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 
Why functional programming matters
Why functional programming mattersWhy functional programming matters
Why functional programming matters
 

Mais de Divani Barbosa (20)

Banco de Dados MySQL + NetBeans Java + Interface Grafica
Banco de Dados MySQL + NetBeans Java + Interface GraficaBanco de Dados MySQL + NetBeans Java + Interface Grafica
Banco de Dados MySQL + NetBeans Java + Interface Grafica
 
Aula 22
Aula 22Aula 22
Aula 22
 
Aula 21
Aula 21Aula 21
Aula 21
 
Aula 20
Aula 20Aula 20
Aula 20
 
Aula 19
Aula 19Aula 19
Aula 19
 
Aula 18
Aula 18Aula 18
Aula 18
 
Aula 17
Aula 17Aula 17
Aula 17
 
Aula 16
Aula 16Aula 16
Aula 16
 
Aula 15
Aula 15Aula 15
Aula 15
 
Aula 13
Aula 13Aula 13
Aula 13
 
Aula 12
Aula 12Aula 12
Aula 12
 
Aula 11
Aula 11Aula 11
Aula 11
 
Aula 10
Aula 10 Aula 10
Aula 10
 
Aula 9
Aula 9Aula 9
Aula 9
 
Aula 7
Aula 7 Aula 7
Aula 7
 
Aula 6
Aula 6Aula 6
Aula 6
 
Aula 5
Aula 5 Aula 5
Aula 5
 
Aula 4
Aula 4 Aula 4
Aula 4
 
Aula 3
Aula 3Aula 3
Aula 3
 
Aula 2
Aula 2Aula 2
Aula 2
 

Aula14

  • 1. Estrutura de Dados Lista Simplesmente Encadeada Pilha NPR profa. Divani Barbosa Aula 10 parte 1
  • 2. Pilha como Lista Encadeada Política de escalonamento LIFO Cada elemento possui um elo (endereço) para outro elemento. ● ● ● ● null topo → Elemento ou Nó para Pilha: class No { public int item; public No ant; } Fonte: http://www.ime.usp.br/~pf/algoritmos/aulas/lista.html Elo para outro Nó
  • 3. Classe para Pilha Encadeada de int class PilhaSE { private No topo; public PilhaSE() { topo = null; } public boolean empty() { return (topo == null); } public int top() { return topo.item; } public void pop() { if (!empty()) topo = topo.ant; } public void push(int valor) { No novo = new No(); // Aloca memoria para novo Nó novo.item = valor; novo.ant = topo; topo = novo; } } // fim classe Pilha como Lista Encadeada
  • 4. Exemplo: Aplicação de Pilha Notação infixa e pós-fixa Considere a seguinte expressão: (5 + 9) * 2 + 6 * 5 Se as operações não forem realizadas na ordem correta, obteremos o resultado errado. Essa expressão foi escrita na notação matemática usual. Essa notação é chamada infixa. Uma das característica da notação infixa é que a ordem das operações é determinada pela precedência do operador, quando a ordem das operações requerem uma precedência diferente, usamos os parênteses. Uma expressão entre parênteses é avaliada primeiro. Um matemático polonês Lukasiewicz apresentou uma alternativa para essa notação que não necessita da utilização dos parênteses e não requer uma procedência de operadores.
  • 5. Notação Pós-fixa ou Polonesa Reversa (NPR) Essa notação é chamada de pós-fixa pois os operadores estão depois dos operandos. Ela não faz uso de parênteses e não requer precedência de operadores. Infixa: (5 + 9) * 2 + 6 * 5 Pós-fixa: 5 9 + 2 * 6 5 * + infixa pós-fixa a-b ab- a-b*c abc*- (a-b)*c ab-c* a+b*c^d-e abcd^*+e- a*(b+c)*(d-g)*h abc+*dg-*h* a*b-c*d^e/f+g*h ab*cde^*f/-gh*+ Exemplos:
  • 6. O valor de uma notação pos-fixa pode ser calculada facilmente com ajuda de uma pilha. Pós-fixa: 5 9 + 2 * 6 5 * +
  • 7. Calculadora pos-fixa NPR import java.io.*; import java.lang.*; class No { public int item; // conteúdo da pilha inteiro public No ant; } class PilhaSE { // pilha de operandos inteiros private No topo; public PilhaSE() { topo = null; } public boolean empty() { return (topo == null); } public int top() { return topo.item; } public void pop() { if (!empty()) topo = topo.ant; } public void push(int valor) { No novo = new No(); novo.item = valor; novo.ant = topo; topo = novo; } } // Continua ...
  • 8. // Continuação ... class PilhaNPR { public static void main(String[] args) throws IOException { PilhaSE p = new PilhaSE(); int arg1, arg2; char c; System.out.println("Calculadora notação pos-fixa NPR"); System.out.println(" Exemplo de uso:n 5 9 + 2 * 6 5 * + "); System.out.print("Informe sua expressao:n "); String s = lerStr(); for (int i=0; i<s.length(); i++) { c = s.charAt(i); // lendo caracter por caracter da string s if (Character.isDigit(c)) // se caracter é numero p.push(Character.digit(c,10)); // transforme char em int e adicione // na pilha else if(c=='+') { arg1 = p.top(); p.pop(); arg2 = p.top(); p.pop(); p.push(arg1+arg2); } else if(c=='*') { arg1 = p.top(); p.pop(); arg2 = p.top(); p.pop(); p.push(arg1*arg2); } // Continua ...
  • 9. // Continuação ... else if(c=='-') { arg1 = p.top(); p.pop(); arg2 = p.top(); p.pop(); p.push(arg1-arg2); } else if(c=='/') { arg1 = p.top(); p.pop(); arg2 = p.top(); p.pop(); p.push(arg1/arg2); } else if(c=='^') { arg1 = p.top(); p.pop(); arg2 = p.top(); p.pop(); p.push((int) Math.pow(arg1,arg2)); } } System.out.println("Resposta = " + p.top()); // Imprimindo calculo final p.pop(); } // fim programa principal public static String lerStr() throws IOException { // função para ler string InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); return br.readLine(); } // fim função ler string } // fim classe principal
  • 10. Atividade 1. Melhore a calculadora pós-fixa NPR incluindo as seguintes funcionalidades: (a) Adicione um método clear que esvazie a pilha. (b) Adicione um método print que imprima o conteúdo da pilha de operandos. (c) Faça um menu para o usuário como se fosse uma calculadora 2. Projete um programa usando pilha que transforme uma expressão infixa em pós-fixa.