Upload
camila-pinho-gameiro
View
220
Download
1
Embed Size (px)
Citation preview
ESTRUTURA DE DADOS
Aula 6 – Pilha
ESTRUTURA DE DADOS
PILHA – Aula6
Atenção aos Temas Principais dessa Aula
ESTRUTURA DE DADOS
PILHA – Aula6
Conteúdo Programático desta aula
Apresentar o conceito de Pilha; Apresentar aplicações da Pilha;Apresentar o critério LIFO e suas limitações Implementar as funções empilhar, desempilhar, exibir topo e outras;
ESTRUTURA DE DADOS
PILHA – Aula6
Direto ao Assunto
ESTRUTURA DE DADOS
PILHA – Aula6
ESTRUTURA DE DADOS
PILHA – Aula6
VOCÊ ERROU! NÃO ERA PILHA?
ESTRUTURA DE DADOS
PILHA – Aula6
ERA! E AGORA?
ESTRUTURA DE DADOS
PILHA – Aula6
USA AQUELAS TECLAS.
ESTRUTURA DE DADOS
PILHA – Aula6
ESTRUTURA DE DADOS
PILHA – Aula6
ESTRUTURA DE DADOS
PILHA – Aula6
“A pilha é uma das estruturas de dados mais úteis em computação.… Uma pilha é um tipo especial de lista linear em que todas as operações de inserção e remoção são realizadas numa mesma extremidade, denominada topo”(PEREIRA, S.L. 2004, p 17).
Conceito de Pilha
ESTRUTURA DE DADOS
PILHA – Aula6
ESTRUTURA DE DADOS
PILHA – Aula6
ESTRUTURA DE DADOS
PILHA – Aula6
Considerações sobre a PILHA
ESTRUTURA DE DADOS
PILHA – Aula6
Inserção ou Remoção de um elemento sempre acontece na mesma extremidade.
Considerações sobre a PILHA
ESTRUTURA DE DADOS
PILHA – Aula6
Inserção na Pilha
ESTRUTURA DE DADOS
PILHA – Aula6
Inserção na Pilha
Remoção da Pilha
ESTRUTURA DE DADOS
PILHA – Aula6
Inserção ou Remoção de um elemento sempre acontece na mesma extremidade.
Não existe movimentação na pilha quando inserimos, ou removemos um elemento dela.
Considerações sobre a PILHA
ESTRUTURA DE DADOS
PILHA – Aula6
Inserção ou Remoção de um elemento sempre acontece na mesma extremidade.
Podemos usar matrizes homogêneas ou heterogêneas, alocação sequencial, e uma variável para controlar o topo.
Não existe movimentação na pilha quando inserimos, ou removemos um elemento dela.
Considerações sobre a PILHA
ESTRUTURA DE DADOS
PILHA – Aula6
Um dos fatores que limita o crescimento da pilha é a quantidade de memória alocada quando usamos matrizes.
Considerações sobre a PILHA
ESTRUTURA DE DADOS
PILHA – Aula6
Um dos fatores que limita o crescimento da pilha é a quantidade de memória alocada quando usamos matrizes.
Quando formos empilhar um elemento, é preciso verificar se a pilha não está cheia. Isso evita overflow.
Considerações sobre a PILHA
ESTRUTURA DE DADOS
PILHA – Aula6
Um dos fatores que limita o crescimento da pilha é a quantidade de memória alocada quando usamos matrizes.
Quando formos empilhar um elemento, é preciso verificar se a pilha não está cheia. Isso evita overflow.
Quando formos desempilhar um elemento, é preciso verificar se a pilha não está vazia. Isso evita underflow.
Considerações sobre a PILHA
ESTRUTURA DE DADOS
PILHA – Aula6
ESTRUTURA DE DADOS
PILHA – Aula6
ESTRUTURA DE DADOS
PILHA – Aula6
Quem não se lembra?
ESTRUTURA DE DADOS
PILHA – Aula6
Quem não se lembra?
1a vez
ESTRUTURA DE DADOS
PILHA – Aula6
Quem não se lembra?
2a vez
ESTRUTURA DE DADOS
PILHA – Aula6
Quem não se lembra?
3a vez
ESTRUTURA DE DADOS
PILHA – Aula6
Quem não se lembra?
4a vez
ESTRUTURA DE DADOS
PILHA – Aula6
Quem não se lembra?
ESTRUTURA DE DADOS
PILHA – Aula6
Quem não se lembra?
1a vez
ESTRUTURA DE DADOS
PILHA – Aula6
Quem não se lembra?
2a vez
ESTRUTURA DE DADOS
PILHA – Aula6
Quem não se lembra?
3a vez
ESTRUTURA DE DADOS
PILHA – Aula6
Quem não se lembra?
4a vez
ESTRUTURA DE DADOS
PILHA – Aula6
Avaliação de parênteses – um clássico
ESTRUTURA DE DADOS
PILHA – Aula6
#include <iostream>#include <cstring>using namespace std;int expressaoCorreta( char s[]);int main(){ char p1[]={"((()))"}; char p2[]={"(()))"}; if(expressaoCorreta(p1)==1) cout<<"\n"<<p1<<" Esta Correta\n"; else cout<<"\n"<<p1<<" Nao esta Correta\n"; if(expressaoCorreta(p2)==1) cout<<"\n"<<p2<<" Esta Correta\n"; else cout<<"\n"<<p2<<" Nao esta Correta\n"; system("pause");}
Código
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( ( ( ) ) ) \0
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 (0 0 ( ( ) ) ) \0
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 (0 0 ( ( ) ) ) \0
s[0]== ‘)’?
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 (0 0 ( ( ) ) ) \0
s[0]== ‘)’?N
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( 1 ( ) ) ) \0
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 (1 1 ( ) ) ) \0
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 (1 1 ( ) ) ) \0
s[1]== ‘)’?
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 (1 1 ( ) ) ) \0
s[1]== ‘)’?N
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 ( 2 ) ) ) \0
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 (2 2 ) ) ) \0
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 (2 2 ) ) ) \0
s[2]== ‘)’?
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 (2 2 ) ) ) \0
s[2]== ‘)’?N
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 ( (2 2 ) 3 ) ) \0
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 ( (2 2 )3 3 ) ) \0
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 ( (2 2 )3 3 ) ) \0
s[3]== ‘)’?
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 ( (2 2 )3 3 ) ) \0
s[3]== ‘)’?S
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 ( (2 2 )3 3 ) ) \0
t!=0 && pilha[t-1]==‘(‘?
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 ( (2 2 )3 3 ) ) \0
t!=0 && pilha[t-1]==‘(‘?S
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 ( (2 2 )3 3 ) 2 ) \0
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 ( (2 2 )3 3 )4 2 ) \0
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 ( (2 2 )3 3 )4 2 ) \0
s[4]== ‘)’?
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 ( (2 2 )3 3 )4 2 ) \0
s[4]== ‘)’?S
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 ( (2 2 )3 3 )4 2 ) \0
t!=0 && pilha[t-1]==‘(‘?
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 ( (2 2 )3 3 )4 2 ) \0
t!=0 && pilha[t-1]==‘(‘?S
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 ( (2 2 )3 3 )4 2 ) 1 \0
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 ( (2 2 )3 3 )4 2 )5 1 \0
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 ( (2 2 )3 3 )4 2 )5 1 \0
s[5]== ‘)’?
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 ( (2 2 )3 3 )4 2 )5 1 \0
s[5]== ‘)’?S
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 ( (2 2 )3 3 )4 2 )5 1 \0
t!=0 && pilha[t-1]==‘(‘?
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 ( (2 2 )3 3 )4 2 )5 1 \0
t!=0 && pilha[t-1]==‘(‘?S
Função 0
123456
ESTRUTURA DE DADOS
PILHA – Aula6
Função
i t s pilha 0 ( (0 0 ( (1 1 ( (2 2 )3 3 )4 2 )5 1 \0 0
0123456
ESTRUTURA DE DADOS
PILHA – Aula6
i t s pilha 0 ( (0 0 ( (1 1 ( (2 2 )3 3 )4 2 )5 1 \06 0
0123456
retorna 1
Função
ESTRUTURA DE DADOS
PILHA – Aula6
Conversão decimal para binário – outro clássico
ESTRUTURA DE DADOS
PILHA – Aula6
#include <iostream>#include <cstdlib>#define TAM 40using namespace std;void empilha(int p[], int &t, int v);void desempilha(int p[], int &t);int main(){ int topo=-1, pilha[TAM],num, resto; cout<<"\nNumero em decimal:"; cin>>num;num=abs(num); while(num > 0) { resto=num %2; empilha(pilha, topo, resto); num/=2; } desempilha(pilha,topo); cout<<"\n\n"; system("pause"); }
Código
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t resto num pilha
-1 ? 14
01234.
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t resto num pilha
-1 ? 14-1 0 14
01234.
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t resto num pilha
-1 ? 14 0-1 0 14 0 0 14
01234.
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t resto num pilha
-1 ? 14 0-1 0 14 0 0 14 0 0 7
01234.
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t resto num pilha
-1 ? 14 0-1 0 14 0 0 14 0 0 7 0 1 7
01234.
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t resto num pilha
-1 ? 14 0-1 0 14 1 0 0 14 0 0 7 0 1 7 1 1 7
01234.
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t resto num pilha
-1 ? 14 0-1 0 14 1 0 0 14 0 0 7 0 1 7 1 1 7 1 1 3
01234.
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t resto num pilha
-1 ? 14 0-1 0 14 1 0 0 14 0 0 7 0 1 7 1 1 7 1 1 3 1 1 3
01234.
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t resto num pilha
-1 ? 14 0-1 0 14 1 0 0 14 1 0 0 7 0 1 7 1 1 7 1 1 3 1 1 3 2 1 3
01234.
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t resto num pilha
2 1 1 0 1 1
01234.
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t resto num pilha
2 1 1 02 1 1 1 1
01234.
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t resto num pilha
2 1 1 02 1 1 13 1 1 1 1
01234.
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t resto num pilha
2 1 1 02 1 1 13 1 1 13 1 0 1
01234.
FIM - empilha
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t pilha3 0 1 1 1
012345
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t pilha3 0 1 1 1
012345
Saída
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t pilha3 02 1 1 1
012345
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t pilha3 02 12 1 1
012345
Saída
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t pilha3 02 12 11 1
012345
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t pilha3 02 12 11 11
012345
Saída
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t pilha3 02 12 11 110
012345
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t pilha3 02 12 11 1100
012345
Saída
ESTRUTURA DE DADOS
PILHA – Aula6
Função
t pilha3 02 12 11 1100-1
012345
Saída
FIM - desempilha
ESTRUTURA DE DADOS
PILHA – Aula6
ESTRUTURA DE DADOS
PILHA – Aula6
1) Inicializa () ou Init()2) Empilhar() ou Push()3) Desempilhar() ou Pop()4) acessoTopo() ou Top()5) verificaPilhaCheia() ou isFull()6) verificaPilhaVazia() ou isEmpty()
ESTRUTURA DE DADOS
PILHA – Aula6
0 PROBLEMAUma carreta que transporta cinco carros.Cada carro, será preso a uma tranca que tem duas chaves. Uma que foi enviada ao proprietário e a outra com o motorista.Cada carro tem um código de saída, identificação(nome do proprietário, tipo de carro e endereço) e nota fiscal.A solução será apresentada com struct , funções matrizes(alocação contígua).
ESTRUTURA DE DADOS
PILHA – Aula6
A struct
ESTRUTURA DE DADOS
PILHA – Aula6
Inicialização
ESTRUTURA DE DADOS
PILHA – Aula6
Protótipos
Inicialização
ESTRUTURA DE DADOS
PILHA – Aula6
#include <iostream>#include <cstdlib>#define TAM 5using namespace std;struct atende{ char identificacao[TAM][60]; long long notaFiscal[TAM]; int codigoSaida[TAM], topo; };void empilha(atende &pilha);void desempilha(atende &pilha);void mostraTopo(atende &pilha);void lista(atende &pilha);
Código
1
ESTRUTURA DE DADOS
PILHA – Aula6
int main(){ int op; atende carros; carros.topo=-1; do { system("cls"); cout<<"\nPILHA( LIFO- Last In - First Out )\n\n"; cout<<"\n1- Inserir carro"; cout<<"\n2- Remover carro"; cout<<"\n3- Mostrar o primeiro carro a sair"; cout<<"\n4- listar - QUESTAO DIDATICA. Remova depois que testar"; cout<<"\n5- Sai"; cout<<"\nOpcao: "; cin>>op; system("cls");
Código
2
ESTRUTURA DE DADOS
PILHA – Aula6
ESTRUTURA DE DADOS
PILHA – Aula6
switch(op) { case 1: cin.get(); empilha(carros); break; case 2: desempilha(carros); break; case 3: mostraTopo(carros); break;
case 4: lista(carros); break; case 5: cout<<"\nAplicacao da PILHA\ n"; break; default: cout<<"\nOPCAO INVALIDA\n"; } cout<<"\n\n";system("pause"); }while(op!=5);}
Código
3
ESTRUTURA DE DADOS
PILHA – Aula6
void empilha(atende &pilha){ char id[60]; long long nf; int codS; if(pilha.topo == TAM-1) cout<<"\nATENCAO. Carreta Cheia\n"; else { cout<<"\nProprietatio/ Tipo de carro/ Destino:"; cin.getline(id, 60); cout<<"\nNota Fiscal: "; cin>>nf; cout<<"\nCodigo de saida: "; cin>>codS; pilha.topo++; //atualiza o topo // pilha recebe valor strcpy(pilha.identificacao[pilha.topo], id); pilha.notaFiscal[pilha.topo]=nf; pilha.codigoSaida[pilha.topo]=codS; }}
Código
4
ESTRUTURA DE DADOS
PILHA – Aula6
ESTRUTURA DE DADOS
PILHA – Aula6
ESTRUTURA DE DADOS
PILHA – Aula6
void desempilha(atende &pilha){ if(pilha.topo == -1) cout<<"\nATENCAO. Carreta Vazia \n"; else { cout<<"\nCodigo do carro entregue: “; //* cout<< pilha.codigoSaida[pilha.topo]; cout<<"\nNota fiscal do carro entregue: “; //* cout<< pilha.notaFiscal[pilha.topo]; cout<<"\nIdentificacao do carro entregue: “; //* cout<< pilha.identificacao[pilha.topo]; pilha.topo--; //atualiza o topo }} //* MELHORAR O ENTENDIMENTO.
Código
5
ESTRUTURA DE DADOS
PILHA – Aula6
ESTRUTURA DE DADOS
PILHA – Aula6
void mostraTopo(atende &pilha){ if(pilha.topo == -1) cout<<"\nATENCAO. Carreta Vazia \n"; else { cout<<"\nCodigo do carro: “; //* cout<<pilha.codigoSaida[pilha.topo]; cout<<"\nNota fiscal do carro: “; //* cout<<pilha.notaFiscal[pilha.topo]; cout<<"\nIdentificacao do carro: “; //* cout<<pilha.identificacao[pilha.topo]; } } //* MELHORAR O ENTENDIMENTO.
Código
6
ESTRUTURA DE DADOS
PILHA – Aula6
ESTRUTURA DE DADOS
PILHA – Aula6
void lista(atende &pilha){ if(pilha.topo == -1) cout<<"\nATENCAO. Carreta Vazia \n"; else { cout<<"\nOrdem de Saida\n"; for(int x=pilha.topo; x>=0; x--) { cout<<"\n\n"<<x+1<<"o carro"; cout<<"\nCodigo do carro: "<<pilha.codigoSaida[x]; cout<<"\nNota fiscal do carro: "<<pilha.notaFiscal[x]; cout<<"\nIdentificacao do carro: “; //* cout<<pilha.identificacao[x]; } }} //* MELHORAR O ENTENDIMENTO.
Código
7
ESTRUTURA DE DADOS
PILHA – Aula6
ESTRUTURA DE DADOS
PILHA – Aula6
Resumindo