pilhas e filas denise guliato faculdade de computação – ufu guliato vários slides foram...
TRANSCRIPT
![Page 1: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/1.jpg)
Pilhas e FilasPilhas e Filas
Denise GuliatoFaculdade de Computação – UFUwww.facom.ufu.br/~guliato
Vários slides foram adaptados de Nina Edelwais e Renata GalanteEstrutura de Dados – Série de Livros Didáticos - Informática - UFRGS
![Page 2: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/2.jpg)
Pilhas e filas
Disciplina restrita
• acesso permitido somente em alguns nodos
Com disciplina restrita de organização e acesso a seus nodos
Listas lineares especiaisListas lineares especiais
![Page 3: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/3.jpg)
Pilha
Listas lineares especiaisListas lineares especiaismais usuaismais usuais
Pilhas e filas
Fila
LIFO Last In First Out o último componente inserido é o primeiro a ser retirado
FIFO First In First Out o primeiro componente inserido é também o primeiro a ser retirado
![Page 4: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/4.jpg)
Consultas
Exclusões Inserções
Topo
Base
Pilhas e FilasPilhas e Filas
Início FinalInserções
Exclusõese
Consultas
PILHA
FILA
![Page 5: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/5.jpg)
PilhasPilhas
![Page 6: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/6.jpg)
ConsultasExclusões Inserções
Topo
Base
• Criar uma pilha vazia• Inserir um elemento no topo da pilha• Remover um elemento do topo de pilha• Consultar o topo da pilha• Destruir a pilha• Verificar se é cheia•Verificar se é vazia
Operações sobre PilhasOperações sobre PilhasPilhas
![Page 7: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/7.jpg)
TAD PilhaTAD Pilha
Dados: numeros inteiros
Operações:E_cheia entrada: o endereço da pilha processo: verifica se pilha esta na condição de
cheia saida: 1 se cheia, 0 caso contrário (-1 se pilha não
existe)
![Page 8: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/8.jpg)
TAD PilhaTAD Pilha
E_vazia entrada: endereço da pilha processo: verifica se a pilha está na condição
de vazia saida: 1 se vazia, 0 caso contrario (-1 se a pilha
não existe)
![Page 9: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/9.jpg)
TAD PilhaTAD Pilha
Cria_pilha entrada: nenhuma processo: aloca a pilha e a coloca na condição
de vazia saida: endereço da pilha
![Page 10: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/10.jpg)
TAD PilhaTAD Pilha
Push entrada: endereço da variável que contém o
endereço da pilha e o elemento processo: insere elemento no topo da pilha e
atualiza pilha saida: 1 se sucesso , 0 se fracasso
![Page 11: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/11.jpg)
TAD PilhaTAD Pilha
Pop entrada: endereço da variavel que contem o
endereço da pilha e endereço do elemento que conterá o valor do elemento a ser removido
processo: remove elemento do topo da pilha e atualiza pilha
saida: 1 se sucesso e 0 se fracasso
![Page 12: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/12.jpg)
TAD PilhaTAD Pilha
Top entrada: endereço da pilha e o endereço do
elemento consultado processo: consulta o topo da pilha saida: 1 se sucesso e 0 se fracasso
![Page 13: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/13.jpg)
TAD PilhaTAD Pilha
Libera_pilha entrada: endereço do endereço da pilha processo: libera toda área alocada para a pilha saida: nenhuma
![Page 14: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/14.jpg)
PilhasPilhas
Pilhas Pilhas implementadas por implementadas por contiguidade físicacontiguidade física
![Page 15: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/15.jpg)
Pilha - contigPilha - contiguuidade física idade física LIMITE
Topo
BasePilha
Índicesdo arranjo
Pilha – contiguidade física
• Implementada usando um arranjo
• Índices de controle da pilha:• BASE da pilha• TOPO atual da pilha• LIMITE máximo que pode ser ocupado pela pilha
![Page 16: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/16.jpg)
Exemplo de manipulação de uma pilhaExemplo de manipulação de uma pilha
MAX-1
TOPO
BASE
PILHA
9
8
7
6
5
4
3
2
1
0 3
MAX-1
TOPOBASE 3
7
MAX-1
TOPOBASE 3
75
MAX-1
TOPO
BASE 37
MAX-1
TOPOBASE
Retorna “7”
1. Inicializar pilha de valores inteiros,a partir do índice 0, máximo 10 nós2. Inserir nodo com valor 33. Inserir nodo com valor 74. Inserir nodo com valor 55. Remover nodo do topo6. Consultar pilha
Pilha – contiguidade física
PILHA PILHA PILHA PILHA
9
8
7
6
5
4
3
2
1
0
9
8
7
6
5
4
3
2
1
0
9
8
7
6
5
4
3
2
1
0
9
8
7
6
5
4
3
2
1
0
Retorna “5”
![Page 17: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/17.jpg)
Pilha – contiguidade física
struct stack { int pilha[MAX]; int topo; };typedef struct stack Pilha;
Tipo de dados utilizado nos algoritmos para pilha implementada por contiguidade física:
![Page 18: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/18.jpg)
MAX - 1
TopoBase
Pilha
1. Alocar área para a pilha2. Indicar que a pilha está vazia
Exemplo:
Base 0Topo – 1MAX 10
Criação da pilhaCriação da pilha
Pilha – contiguidade física
9
8
7
6
5
4
3
2
1
0
![Page 19: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/19.jpg)
Pilha *Cria_pilha(void){ Pilha *Ptp; Ptp = (Pilha*) malloc(sizeof(Pilha)); if (Ptp != NULL) Ptp->topo = -1; return Ptp;}
Algoritmo:Algoritmo: criação de uma pilha criação de uma pilhaPilha *Cria_pilha(void)Pilha *Cria_pilha(void)
Pilha – contiguidade física
![Page 20: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/20.jpg)
Verifica se pilha é cheiaVerifica se pilha é cheia int E_cheia(Pilha *Ptp) int E_cheia(Pilha *Ptp)
int E_vazia(Pilha *Ptp)int E_vazia(Pilha *Ptp)
int E_cheia(Pilha *Ptp){ if ( Ptp == NULL) return -1; if (Ptp->topo == MAX-1) return 1; else return 0;}
int E_vazia(Pilha *Ptp){ if (Ptp == NULL) return -1; if (Ptp->topo == -1) return 1; else return 0;}
![Page 21: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/21.jpg)
MAX -1
Topo
Base
Pilha
MAX - 1
Topo
Base
Pilha
9876543210
Operação PUSH
Inserção de um elemento na pilhaInserção de um elemento na pilhaPilha – contiguidade física
9
8
7
6
5
4
3
2
1
0
![Page 22: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/22.jpg)
Pilha – contiguidade físicaAlgoritmo: Algoritmo: inserer elemento no topo da pilhaint Push(Pilha **Ptp, int elem)
int Push(Pilha **Ptp, int elem){ if ((*Ptp) == NULL||(*Ptp)->topo == MAX-1) return 0; (*Ptp)->topo++; (*Ptp)->pilha[(*Ptp)->topo] = elem; return 1;}
![Page 23: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/23.jpg)
MAX - 1
Topo
Base
Pilha
MAX - 1
Topo
Base
Pilha
Operação POP
Pilha – contiguidade física
Remoção de um elemento da pilhaRemoção de um elemento da pilha
9
8
7
6
5
4
3
2
1
0
9
8
7
6
5
4
3
2
1
0
![Page 24: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/24.jpg)
int Pop(Pilha **Ptp, int *elem){ if ((*Ptp) == NULL || (*Ptp)->topo == -1) return 0; *elem = (*Ptp)->pilha[(*Ptp)->topo]; (*Ptp)->topo--; return 1;}
Algoritmo:Algoritmo: Remover elemento do topo de Pilhaint Pop(Pilha **Ptp, int *elem)
![Page 25: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/25.jpg)
?
MAX - 1
Topo
Base
Pilha
9876543210
Pilha – contiguidade física
Consulta o topa da pilhaConsulta o topa da pilha
• Acesso somente ao elemento do topo da pilha
![Page 26: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/26.jpg)
int Top(Pilha *Ptp, int *elem){ if (Ptp == NULL || Ptp->topo == -1) return 0; *elem = Ptp->pilha[Ptp->topo]; return 1;}
Algoritmo:Algoritmo: Consultar o elemento do topo de Pilha int Top(Pilha *Ptp, int *elem)
![Page 27: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/27.jpg)
Destruição da pilhaDestruição da pilhavoid Libera_pilha(Pilha** Ptp)void Libera_pilha(Pilha** Ptp)
void Libera_pilha(Pilha **Ptp){ free(*Ptp); *Ptp=NULL;}
![Page 28: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/28.jpg)
typedef struct stack Pilha;
int E_cheia(Pilha *Ptp);int E_vazia(Pilha *Ptp);Pilha *Cria_pilha(void);int Push(Pilha **Ptp, int elem);int Pop(Pilha **Ptp, int *elem);Int Top(Pilha *Ptp, int *elem);void Libera_pilha(Pilha **Ptp);
paeas.hpaeas.h
![Page 29: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/29.jpg)
Exercício para entregar agoraExercício para entregar agoraImplemente o TAD utilizando uma estrutura de dados com
alocação estática e acesso sequencialImplemente uma função que, usando o TAD Pilha,
verifique se uma dada palavra representada como uma STRING (que não contenha brancos) é uma palíndromo (palavras que não se alteram quando lidas da direita para a esquerda ou da esquerda para a direita). ReExemplos: ANA, ADGHGDA. Retorne 1 se palavra é palindromo, e 0 caso contrario.
Faça um programa que leia uma string (conjunto de palavras separadas por brancos) e indique quais palavras da string são palindromos e quais não são. A string eh dada por linha de comando
![Page 30: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/30.jpg)
PilhasPilhas
Pilhas Pilhas implementadas por implementadas por encadeamentoencadeamento
![Page 31: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/31.jpg)
Base
Topo
inserções
remoções
?consultas
PtPilha
Info prox
Topo da pilha
Base da pilha
Endereço do topo da pilha
Pilha implementada por encadeamentoPilha implementada por encadeamento
struct no{ int info; struct no* prox; };typedef struct no Pilha;
Tipo de dados utilizado nos algoritmos:
![Page 32: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/32.jpg)
Pilha por encadeamento
Criação de pilha encadeadaCriação de pilha encadeada
• Pilha criada vazia
• Atribuir endereço nulo para apontador que contém o endereço do topo da pilha
![Page 33: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/33.jpg)
Algoritmo:Algoritmo: Criar Pilha EncadeadaPilha* Cria_pilha(void)Pilha* Cria_pilha(void)
Pilha por encadeamento
Pilha* Cria_pilha(void){ return NULL;}
![Page 34: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/34.jpg)
Topo
Inserção Inserção de um nodo de um nodo em pilha encadeadaem pilha encadeada
Topo
Pilha por encadeamento
• Novo nodo inserido sempre no topo da pilha
PtPilha PtPilha
Topo
Novo nodo
Base Base
![Page 35: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/35.jpg)
int Push(Pilha **Ptp, int elem){ Pilha *pt; pt= (Pilha*)malloc(sizeof(Pilha)); if (pt == NULL) return 0; pt->prox = (*Ptp); pt->info = elem; (*Ptp) = pt; return 1;}
Algoritmo:Algoritmo: Inserir nodo em Pilha Encadeadaint Push(Pilha **Ptp, int elem)
Pilha por encadeamento
![Page 36: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/36.jpg)
PtPilha
Topo
Desempilha um nodo de umaDesempilha um nodo de uma pilha encadeada pilha encadeada
Pilha por encadeamento
Topo
PtPilha
Base Base
• Só pode ser removido o nodo do topo da pilha
Nodo a ser removido
![Page 37: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/37.jpg)
Pilha por encadeamentoAlgoritmo:Algoritmo: Desempilha nodo de Pilha Encadeadaint Pop(Pilha * *Ptp, int* elem)
int Pop(Pilha **Ptp, int *elem){ Pilha *aux = *Ptp; if (*Ptp == NULL) return 0; *elem = (*Ptp)->info; *Ptp= (*Ptp)->prox; free(aux); return 1;}
![Page 38: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/38.jpg)
Consulta à pilha encadeada Consulta à pilha encadeada
Pilha por encadeamento
• Só pode ser acessado o nodo do topo da pilha
Topo
PtPilha
Base
Nodo que pode ser acessado
![Page 39: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/39.jpg)
Pilha por encadeamentoAlgoritmo:Algoritmo: Consultar nodo do topo de Pilha Encadeadaint Top (Pilha *Ptp, int *elem)
int Top(Pilha *Ptp, int *elem){ if (Ptp == NULL) return 0; *elem = Ptp->info; return 1;}
![Page 40: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/40.jpg)
PtPilha = nilBase
Topo
Base
Topo
Base
Topo
Base
Topo
PtPilha
PtPilha
PtPilha
Destruição de uma pilha encadeada Destruição de uma pilha encadeada
Pilha por encadeamento
• Liberar espaço ocupado pelos nodos, sempre a partir do topo da pilha
• No final: apontador para o topo = endereço nulo
![Page 41: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/41.jpg)
Pilha por encadeamentoAlgoritmo:Algoritmo: Destruir Pilha Encadeadavoid Libera_pilha(Pilha **Ptp)
void Libera_pilha(Pilha **Ptp){ Pilha *aux; while ((*Ptp) != NULL) { aux = (*Ptp); (*Ptp) = (*Ptp)->prox; free(aux); }}
![Page 42: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/42.jpg)
Verifica de pilha esta cheiaVerifica de pilha esta cheiaint E_cheia(Pilha *Ptp)int E_cheia(Pilha *Ptp)
Verifica de pilha esta vaziaVerifica de pilha esta vaziaint E_vazia(Pilha *Ptp)int E_vazia(Pilha *Ptp)
int E_cheia(Pilha *Ptp){ return 0;}
int E_vazia(Pilha *Ptp){ if (Ptp == NULL) return 1; else return 0;}
![Page 43: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/43.jpg)
Exercício
Implemente o TAD Pilha utilizando alocação dinâmica de memória e acesso encadeado.
Teste o programa para reconhecer quais palavras são palíndromos em uma dada frase.
![Page 44: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/44.jpg)
Aplicação da estrutura de dados Aplicação da estrutura de dados Pilha em avaliação de expressões Pilha em avaliação de expressões aritméticasaritméticasForma das expressõesConsidere: Operandos: [0,...,9] Operadores:[+,-,/,x,^] Delimitadores: [(,)]Exemplos:2 + 3 * 5 = 17(2 + 3) * 5 = 25
As operações são efetuadas de acordo com a ordem de precedência dos operadores;
Os parênteses alteram a ordem natural deavaliação dos operadores.
![Page 45: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/45.jpg)
Proponham um algoritmo para Proponham um algoritmo para avaliar expressões aritméticas avaliar expressões aritméticas
22 – 56 / 2;(22-56)/2;40/(2x(3-1) +6);2^3x4;2^(3x4);
?
![Page 46: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/46.jpg)
Notação Polonesa e Notação Polonesa Notação Polonesa e Notação Polonesa InversaInversa
Notação Polonesa (pré-fixada)- Proposta pelo matemático Jan lukasiewiscz em 1920 permite escrever uma expressão aritmética em que a precedência é implícita
Notação Polonesa Inversa (pós-fixada) - proposta por Charles Hamblin em 1950.
![Page 47: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/47.jpg)
Notação Polonesa e Notação Notação Polonesa e Notação Polonesa Inversa Polonesa Inversa expressão:
---------- 2 + 5 x 3 2 + 3 – 42 + (3 – 4)(2 + 4)/(3 -1)(2+4)/(3-1)x42^2*3-4+1/2/(1+1)
forma pós-fixada
2 5 3 x + 2 3 + 4 - 2 3 4 - +2 4 + 3 1 - /2 4 + 3 1 – / 4 x2 2 ^ 3 * 4 – 1 2 / 1 1 + / +
forma pré-fixada
+ 2 x 5 3 - + 2 3 4+ 2 – 3 4/ + 2 4 -3 1x / +2 4-3 1 4 + -*^2 2 3 4 / / 1 2 + 1 1
![Page 48: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/48.jpg)
Forma pós-fixada para avaliar expressoes aritmeticas Forma pós-fixada para avaliar expressoes aritmeticas usando pilha float avalia_expressao(char *pos-fixada)usando pilha float avalia_expressao(char *pos-fixada)
float avalia_expressao(char *pos-fixada)Inicio Ptp aponta para uma pilha vazia Enquanto (nao processou toda expressao pos-fixada) Inicio simbolo = token; se (simbolo é um operando) empilha simbolo na pilha Ptp senao inicio operando2 = desempilha elemento da pilha Ptp operando1 = desempilha elemento da pilha Ptp valor = operando1 simbolo operando2 empilha valor na pilha Ptp fim se Fim enquantoRetorna (desempilha o elemento da pilha Ptp)Fim da funçao
![Page 49: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/49.jpg)
Como transformar uma expressão na forma infixa Como transformar uma expressão na forma infixa para pos-fixa???para pos-fixa???
- Expressões entre parênteses devem ser convertidos de tal forma que possam ser tratadas como um único operando.
- Somente operadores são empilhados . Um operador é empilhado apenas se possui precedência maior que o operador no topo da pilha.
- Abre parênteses é sempre empilhado- Fecha parênteses nunca é empilhado (menor
precedência).Todos os operadores são desempilhados até encontrar um ‘(‘.
- Operandos e operadores desempilhados são colocados na expressão na forma pós-fixa
![Page 50: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/50.jpg)
Algoritmo: char* pos-fixa(char* in-fixa)Inicio inicializa pilha de operadores e aloca area do tamanho da expressao in-fixa enquanto (não processou toda a expressao in-fixa) inicio simbolo = token se (simbolo é operando) coloca simbolo na expressao pos-fixa senao inicio enquanto (pilha não eh vazia E precedencia(topo da pilha, simbolo) inicio elem-topo = desempilha coloca elem-topo na expressao pos-fixa fim enquanto se (pilha eh vazia OU simbolo # ‘)’ ) empilha simbolo senao enquanto ( (elem-topo = desempilha) != ‘(‘ ) coloca elem-topo na expressao pos-fixa; fim se fim se fim enquanto enquanto ( pilha não eh vazia) desempilha topo e coloca na expressao pos-fixa fim enquanto Fim da função
Precedencia(‘(‘, op) --- falsePrecedencia (op,’(‘) ---- false, exceto op=‘)’Precedencia (op,’)’) -----false, exceto op=‘(‘Precedencia (‘)’, op) --- indefinido
Se precedência do topo da pilha maior que símbolo true
símbolotopo de pilha
![Page 51: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/51.jpg)
Exercício usando pilha Exercício usando pilha
Escreva uma função que transforma uma expressão da forma in-fixa para a forma pós-fixa.
Escreva uma função que avalie uma expressão na forma pós-fixa
Escreva um programa que entra com a expressão aritmética pela linha de comando e avalia a expressão.
![Page 52: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/52.jpg)
Exercício usando pilha – cont.Exercício usando pilha – cont.
Os operandos são números reais (positivos e negativos);
Os operadores são: {+,-,x,/,^}Os delimitadores são: {(,)}
Ex: 3.4 x 5 + ( 2.1 – 12 ) (-23 + 24.3 / 2.1) ^ 3
![Page 53: Pilhas e Filas Denise Guliato Faculdade de Computação – UFU guliato Vários slides foram adaptados de Nina Edelwais e Renata Galante Estrutura](https://reader036.vdocuments.net/reader036/viewer/2022062512/552fc132497959413d8d6a43/html5/thumbnails/53.jpg)
Exercicio1- Altere a estrutura do TAD Pilha para conter caracter
( o campo info deve conter dado do tipo char)2- Escreva as funçoes para o novo TAD3- Escreva um programa de aplicação, que dada uma
string passada por linha de comando, verifique se os parenteses e conchetes estao corretamente balanceado. Use a Pilha para resolver o problema.
Ex: (([[]])) correto (([)]) errado (a + b –(d)) correto