Estrutura de dados Pilhas e filas PROFESSOR LUIZ JOSE HOFFMANN FILHO [email protected].
Pilhas e Filas
-
Upload
criatividadezerodocs -
Category
Documents
-
view
15.076 -
download
0
description
Transcript of Pilhas e Filas
![Page 1: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/1.jpg)
Estruturas de Dados 1
Pilhas e filas
Estudo de listas lineares especiais, com disciplina restrita
de organização e de acesso a seus nodos
![Page 2: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/2.jpg)
Estruturas de Dados 2
Pilhas e filas
Disciplina restrita
acesso permitido somente em alguns
nodos
Com disciplina restrita de organização e
acesso a seus nodos
Listas lineares especiais
![Page 3: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/3.jpg)
Estruturas de Dados 3
Pilha
Listas lineares especiais mais 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](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/4.jpg)
Estruturas de Dados 4
Pilhas e Filas Consultas
Exclusões Inserções
Topo
Base
Início FinalInserções
Exclusõese
Consultas
PILHA
FILA
![Page 5: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/5.jpg)
Estruturas de Dados 5
Filas Duplas
Inserções e exclusões podem ocorrer em qualquer extremidade da lista
• Especialização de fila
exclusões
inserções exclusões
inserções
![Page 6: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/6.jpg)
Estruturas de Dados 6
Pilhas e filas
Pilhas
![Page 7: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/7.jpg)
Estruturas de Dados 7
Consultas
Exclusões Inserções
Topo
Base
• Criar uma pilha vazia
• Inserir um nodo no topo da pilha
• Remover o nodo do topo de pilha
• Consultar / modificar nodo do topo da pilha
• Destruir a pilha
Operações sobre Pilhas
Pilhas
![Page 8: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/8.jpg)
Estruturas de Dados 8
Pilhas
Pilhas implementadas por contiguidade física
![Page 9: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/9.jpg)
Estruturas de Dados 9
Pilha - contiguidade física Lim
Topo
Base
Pilha
Índicesdo arranjo
Pilha – contiguidade física
• Implementada sobre um arranjo
• Índices de controle da pilha:
• BASE da pilha
• TOPO atual da pilha
• LIMITE máximo que pode ser ocupado pela pilha
![Page 10: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/10.jpg)
Estruturas de Dados 10
Exemplo de manipulação de uma pilha
Retorna “7”
1. Inicializar pilha de valores inteiros, a partir do índice 1, máximo 10 nós
2. Inserir nodo com valor 3
3. Inserir nodo com valor 7
4. Inserir nodo com valor 5
5. Remover nodo do topo
6. Consultar pilha
Pilha – contiguidade física
LIM
TOPO
BASE
PILHA
10
9
8
7
6
5
4
3
2
13
LIM
TOPOBASE
10
9
8
7
6
5
4
3
2
137
LIM
TOPOBASE
10
9
8
7
6
5
4
3
2
1375
LIM
TOPO
BASE
10
9
8
7
6
5
4
3
2
137
LIM
TOPOBASE
10
9
8
7
6
5
4
3
2
1
PILHA PILHA PILHA PILHA
![Page 11: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/11.jpg)
Estruturas de Dados 11
Pilha – contiguidade física
TipoPilha = arranjo [1..N] de TipoNodo
Operações
Tipo de dados utilizado nos algoritmos para pilha implementada
por contiguidade física:
• Criar uma pilha vazia
• Inserir um nodo no topo da pilha
• Remover o nodo do topo de pilha
• Consultar / modificar nodo do topo da pilha
![Page 12: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/12.jpg)
Estruturas de Dados 12
1. Definir valor do índice de BASE da pilha
2. Definir valor máximo de nodos que a pilha pode ter LIM
3. Indicar que a pilha está vazia através do valor de TOPO
Lim
Topo
Base
Pilha
10
9
8
7
6
5
4
3
2
1
Exemplo:
Base ← 1Topo ← Base – 1Lim ← 6
Criação da pilha
Pilha – contiguidade física
![Page 13: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/13.jpg)
Estruturas de Dados 13
Algoritmo 4.1 - InicializarPilhaArr Entrada: Base (inteiro) Saída: Topo (inteiro)início Topo ← Base – 1fim
Algoritmo: Algoritmo: Inicializar Pilhas implementada sobre Arranjo
Pilha – contiguidade física
![Page 14: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/14.jpg)
Estruturas de Dados 14
Lim
Topo
Base
Pilha
10
9
8
7
6
5
4
3
2
1
Lim
Topo
Base
Pilha
10
9
8
7
6
5
4
3
2
1
Operação PUSH
Inserção de um nodo na pilhaPilha – contiguidade física
![Page 15: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/15.jpg)
Estruturas de Dados 15
Pilha – contiguidade física
Algoritmo: Algoritmo: Inicializar Pilhas implementada sobre Arranjo
Algoritmo 4.2 - InserirPilhaArr Entradas: Pilha (TipoPilha) Lim (inteiro) Topo (inteiro) Valor (TipoNodo) Saídas: Pilha (TipoPilha) Topo (inteiro) Sucesso (lógico)início se Topo < Lim então início Topo ← Topo + 1 Pilha[Topo] ← Valor Sucesso ← verdadeiro fim senão Sucesso ← falsofim
![Page 16: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/16.jpg)
Estruturas de Dados 16
Pilha – contiguidade física
Remoção de um nodo da pilhaRemoção de um nodo da pilha
Lim
Topo
Base
Pilha
10
9
8
7
6
5
4
3
2
1
Lim
Topo
Base
Pilha
10
9
8
7
6
5
4
3
2
1
Operação POP
![Page 17: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/17.jpg)
Estruturas de Dados 17
Algoritmo 4.3 - RemoverPilhaArr Entradas: Pilha (TipoPilha) Topo (inteiro) Base (inteiro) Saídas: Pilha (TipoPilha) Topo (inteiro) Sucesso (lógico) ValorRemovido (TipoNodo)início se Topo ≥ Base então início ValorRemovido ← Pilha[Topo] Topo ← Topo - 1 Sucesso ← verdadeiro fim senão Sucesso ← falsofim
Algoritmo: Algoritmo: Remover nodo do topo de Pilha implementada sobre Arranjo
![Page 18: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/18.jpg)
Estruturas de Dados 18
?
Lim
Topo
Base
Pilha
10
9
8
7
6
5
4
3
2
1
Pilha – contiguidade física
Acesso à pilha
• Somente ao nodo do topo da pilha
• Para consulta e/ou modificação
![Page 19: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/19.jpg)
Estruturas de Dados 19
Algoritmo 4.4 - ConsultarPilhaArr Entradas: Pilha (TipoPilha) Base (inteiro) Topo (inteiro) Saídas: Valor (TipoNodo) Sucesso(lógico)início se Topo ≥ Base então início Valor ← Pilha[Topo] Sucesso ← verdadeiro fim senão Sucesso ← falsofim
Algoritmo: Algoritmo: Consultar nodo do topo de Pilha implementada sobre Arranjo
![Page 20: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/20.jpg)
Estruturas de Dados 20
Pilhas
Pilhas implementadas por encadeamento
![Page 21: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/21.jpg)
Estruturas de Dados 21
Base
Topo
inserçõesremoções
?consultas
PtPilha
Info Elo
Topo da pilha
Base da pilha
Endereço do topo da pilha
Pilha implementada por encadeamento
TipoNodo = registro Info: TipoInfo Elo: TipoPtNodo fim registro
Tipo de dados utilizado nos algoritmos:
![Page 22: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/22.jpg)
Estruturas de Dados 22
Pilha por encadeamento
Criação de pilha encadeada
• Pilha criada vazia
• Atribuir endereço nulo para apontador que contém o
endereço do topo da pilha
![Page 23: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/23.jpg)
Estruturas de Dados 23
Algoritmo: Algoritmo: Criar Pilha Encadeada
Pilha por encadeamento
Algoritmo 4.5 - CriarPilhaEnc Entradas: - Saída: PtPilha (TipoPtNodo)início PtPilha ← nulofim
![Page 24: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/24.jpg)
Estruturas de Dados 24
Inserção de um nodo em pilha encadeada
Pilha por encadeamento
• Novo nodo inserido sempre no topo da pilha
Topo
TopoPtPilha PtPilha
Topo
Novo nodo
Base Base
![Page 25: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/25.jpg)
Estruturas de Dados 25
Algoritmo 4.6 - InserirPilhaEnc Entradas: PtPilha (TipoPtNodo) Valor (TipoInfo) Saída: PtPilha (TipoPtNodo) Variável local: PtNovo (TipoPtNodo)início alocar(PtNovo) PtNovo↑.Info ← Valor PtNovo↑.Elo ← PtPilha PtPilha ← PtNovofim
Algoritmo: Algoritmo: Inserir nodo em Pilha Encadeada
Pilha por encadeamento
![Page 26: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/26.jpg)
Estruturas de Dados 26
Remoção de um nodo de uma pilha encadeada
Pilha por encadeamento
• Só pode ser removido o nodo do topo da pilha
PtPilha
Topo
Topo
PtPilha
Base Base
Nodo a ser removido
![Page 27: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/27.jpg)
Estruturas de Dados 27
Pilha por encadeamento
Algoritmo: Algoritmo: Remover nodo de Pilha Encadeada
Algoritmo 4.7 - RemoverPilhaEnc Entrada: PtPilha (TipoPtNodo) Saídas: PtPilha (TipoPtNodo) Sucesso (lógico) Variável local: PtAux (TipoPtNodo)início se PtPilha ≠ nulo então início PtAux ← PtPilha PtPilha ← PtPilha↑.Elo liberar(PtAux) Sucesso ← verdadeiro fim senão Sucesso ← falsofim
![Page 28: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/28.jpg)
Estruturas de Dados 28
Acesso à pilha encadeada
Pilha por encadeamento
• Só pode ser acessado o nodo do topo da pilha
Topo
PtPilha
Base
Nodo que pode ser acessado
![Page 29: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/29.jpg)
Estruturas de Dados 29
Pilha por encadeamento
Algoritmo: Algoritmo: Consultar nodo do topo de Pilha Encadeada
Algoritmo 4.8 - ConsultarPilhaEnc Entrada: PtPilha (TipoPtNodo) Saídas: Valor (TipoInfo) Sucesso (lógico) início se PtPilha = nulo então Sucesso ← falso senão início Sucesso ← verdadeiro Valor ← PtPilha↑.Info fimfim
![Page 30: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/30.jpg)
Estruturas de Dados 30
Pilha por encadeamento
Algoritmo: DesempilharAlgoritmo: DesempilharConsulta nodo do topo da pilha, e o remove da pilha
Algoritmo 4.9 - Desempilhar Entrada: PtPilha (TipoPtNodo) Saídas: PtPilha (TipoPtNodo) Valor (TipoInfo) Sucesso (lógico) Variável local: PtAux (TipoPtNodo)início se PtPilha = nulo então Sucesso ← falso senão início Sucesso ← verdadeiro Valor ← PtPilha↑.Info PtAux ← PtPilha PtPilha ← PtPilha↑.Elo liberar(PtAux) fimfim
![Page 31: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/31.jpg)
Estruturas de Dados 31
PtPilha = nilBase
Topo
Base
Topo
Base
Topo
Base
Topo
PtPilha
PtPilha
PtPilha
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 32: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/32.jpg)
Estruturas de Dados 32
Pilha por encadeamento
Algoritmo: Algoritmo: Destruir Pilha Encadeada
Algoritmo 4.10 - DestruirPilhaEnc Entrada: PtPilha (TipoPtNodo) Saída: PtPilha (TipoPtNodo) Variável local: PtAux (TipoPtNodo)início enquanto PtPilha ≠ nulo faça início PtAux ← PtPilha PtPilha ← PtPilha↑.Elo liberar(PtAux) fimfim
![Page 33: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/33.jpg)
Estruturas de Dados 33
Pilhas e filas
Filas
![Page 34: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/34.jpg)
Estruturas de Dados 34
Filas
Operações válidas:Operações válidas:
• Criar uma fila vazia
• Inserir um nodo no final da fila
• Excluir o nodo do início da fila
• Consultar / modificar nodo do início da fila
• Destruir a fila
InserçõesExclusões
eConsultas
FinalInício
Filas
![Page 35: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/35.jpg)
Estruturas de Dados 35
Filas
Filas implementadas por contiguidade física
![Page 36: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/36.jpg)
Estruturas de Dados 36
LI : limite inferior da área
IF : início da fila
FF : final da fila
LS : limite superior da área
Fila vaziaFila vazia
IF = 0
Inserções
ExclusõeseConsultas
Fila implementada sobre arranjo
1 2 3 4 5 6 7 8 9 10 12 13 14
LI LSIF FF
FILA
Fila por contiguidade
![Page 37: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/37.jpg)
Estruturas de Dados 37
Evolução da Fila
Fila por contiguidade
2. Inicializar a fila
3. Inserir um novo nodo com valor 3
4. Inserir um novo nodo com valor 7
5. Inserir um novo nodo com valor 5
6. Remover um nodo
FILA
1 2 43 65
1 2 43 65
FILA
LI=IF=FF LS
3
1 2 43 65
FILA
LI=IF LS
3 7
FF
1 2 43 65
FILA
LI=IF LS
3 7 5
FF
1 2 43 65
FILA
LI LS
7 5
FFIF
![Page 38: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/38.jpg)
Estruturas de Dados 38
Ocupação circular do arranjo
LSFFIF
LI
FILA1 2 3 4 5 6 7 8 9 10 12 13 14
1 2 3 4 5 6 7 8 9 10 12 13 14LSFFIFLI
FILA
1 2 3 4 5 6 7 8 9 10 12 13 14LSFFIFLI
FILA
1 2 3 4 5 6 7 8 9 10 12 13 14LS
FFIFLI
FILA
1 2 3 4 5 6 7 8 9 10 12 13 14LSFF IFLI
FILA
Fila por contiguidade
![Page 39: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/39.jpg)
Estruturas de Dados 39
Operações sobre Filasimplementadas por contiguidade
Fila por contiguidade
• Criar uma fila vazia
• Inserir um nodo no final da fila
• Excluir o nodo do início da fila
• Consultar / modificar nodo do início da fila
TipoFila = arranjo [1..N] de TipoNodo
Tipo de dados utilizado nos algoritmos para fila implementada
por contiguidade física:
![Page 40: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/40.jpg)
Estruturas de Dados 40
... ...FFIF LI LS
Espaço disponível para a fila
FILA
Criação de uma fila
Fila por contiguidade
• Inicializar variáveis que controlam início e final da fila e início
e final da área disponível para a fila
![Page 41: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/41.jpg)
Estruturas de Dados 41
Algoritmo: Algoritmo: Inicializar Fila implementada sobre Arranjo
Fila por contiguidade
Algoritmo 4.11 - InicializarFilaArr Entrada: LI (inteiro) Saídas: IF, FF (inteiros)início IF ← FF ← LI – 1fim
![Page 42: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/42.jpg)
Estruturas de Dados 42
Testar se tem espaço livre para inserir:
... ... atrás
na frente... ...
no meio... ...
LI
LI
LI
LS
LS
LS
IF
IF
IF
FF
FF
FF
Inserção de um nodo em uma fila
Fila por contiguidade
• Nodo inserido sempre no final da fila
![Page 43: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/43.jpg)
Estruturas de Dados 43
Algoritmo: Algoritmo: Inserir um nodo em uma Fila implementada sobre Arranjo
Algoritmo 4.12 - InserirFilaArr Entradas: Fila (TipoFila) LI, LS, IF, FF (inteiros) Info (TipoNodo) Saídas: IF, FF (inteiros) Sucesso (lógico)início se (FF ≠ IF - 1) e ((IF ≠ LI) ou (FF ≠ LS)) então início se IF = LI - 1 então IF ← FF ← LI {INSERÇÃO DO PRIMEIRO NODO} senão se FF = L então FF ← LI {INSERÇÃO NO INÍCIO} senão FF ← FF + 1 {INSERÇÃO NO MEIO OU ATRÁS} FILA[FF] ← Info Sucesso ← verdadeiro fim senão Sucesso ← falsofim
![Page 44: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/44.jpg)
Estruturas de Dados 44
Remoção de um nodo de uma fila
Fila por contiguidade
• Nodo removido é sempre o do início da fila
1 2 3 4 5 6 7 8 9 10 12 13 14LSFFIFLI
FILA
1 2 3 4 5 6 7 8 9 10 12 13 14LSFFIFLI
FILA
Nodo que pode ser removido
![Page 45: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/45.jpg)
Estruturas de Dados 45
Algoritmo: Algoritmo: Remover um nodo de uma Fila implementada sobre Arranjo
Algoritmo 4.13 - RemoverFilaArr Entradas: LI, LS, IF, FF (inteiros) Saídas: IF, FF (inteiros) Sucesso (lógico)início se IF ≠ LI - 1 então início se IF = FF então IF ← FF ← LI - 1 {FILA FICA VAZIA} senão se IF = LS então IF ← LI senão IF ← IF + 1 Sucesso ← verdadeiro fim senão Sucesso ← falsofim
![Page 46: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/46.jpg)
Estruturas de Dados 46
Acesso à fila
Fila por contiguidade
• Só o nodo do início da fila pode ser acessado
• Acesso para consulta e/ou alteração
?... ...LSFFIFLI
Nodo que pode ser acessado
![Page 47: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/47.jpg)
Estruturas de Dados 47
Algoritmo: Algoritmo: Consultar Fila implementada sobre Arranjo
Fila por contiguidade
Algoritmo 4.14 - ConsultarFilaArr Entradas: Fila (TipoFila) LI, IF (inteiros) Saídas: Info (TipoNodo) Sucesso (lógico)início se IF ≠ LI - 1 então início Info ← Fila[IF] Sucesso ← verdadeiro fim senão Sucesso ← falsofim
![Page 48: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/48.jpg)
Estruturas de Dados 48
Filas
Filas implementadas por encadeamento
![Page 49: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/49.jpg)
Estruturas de Dados 49
InserçõesExclusões e
Consultas
FinalFrente
Filas implementadas por encadeamento
Filas por encadeamento
TipoNodo = registro Info: TipoInfo Elo: TipoPtNodo fim registro
Tipo de dados para nodos da fila:
F1 FnF3F2
PtFila
Endereço do primeiro da fila, para remoção
Endereço do final da fila, para inserção
Info Elo
Para acessar o último nodo, é necessário percorrer toda a fila a partir do primeiro nodo
![Page 50: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/50.jpg)
Estruturas de Dados 50
Descritor
Prim: primeiro da fila
Ult : último da fila
Filas por encadeamento com descritor
Filas por encadeamento
PtDF
Prim Ult
L1 L2 L4L3
TipoDFila = registro Prim: TipoPtNodo Ult: TipoPtNodo fim registroTipoPtDFila = ↑TipoDFila
Tipo de dados para o descritor da fila:
![Page 51: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/51.jpg)
Estruturas de Dados 51
Operações sobre Filas implementadas por encadeamento com descritor
• Criar uma fila vazia
• Inserir um nodo no final da fila
• Excluir o nodo do início da fila
• Consultar / modificar nodo do início da fila
• Destruir a fila
Filas por encadeamento
![Page 52: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/52.jpg)
Estruturas de Dados 52
Filas por encadeamento
• Alocar o descritor da fila
• Descritor inicializado em endereços nulos
• Fila vazia
Criação da fila encadeada
PtDF
Prim Ult
![Page 53: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/53.jpg)
Estruturas de Dados 53
Algoritmo: Algoritmo: Criar Fila Encadeada endereçada por descritor
Filas por encadeamento
Algoritmo 4.15 - CriarFilaEnc Entradas: - Saída: PtDFila (TipoPtDFila)início alocar(PtDFila) PtDFila↑.Prim ← nulo PtDFila↑.Ult ← nulo fim
![Page 54: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/54.jpg)
Estruturas de Dados 54
Filas por encadeamento
Inserção de um nodo na fila encadeada
PtDFila Prim Ult
/
PtDFila Prim UltPtDFila Prim Ult
PtDFila Prim Ult
![Page 55: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/55.jpg)
Estruturas de Dados 55
Algoritmo: Algoritmo: Inserir novo nodo em Fila Encadeadaendereçada por descritor
Filas por encadeamento
Algoritmo 4.16 - InserirFilaEnc Entradas: PtDFila (TipoPtDFila) Valor (TipoInfo) Saídas: - Variável auxiliar: PtNovo (TipoPtNodo)início alocar(PtNovo) PtNovo↑.Info ← Valor PtNovo↑.Elo ← nulo se PtDFila↑.Prim = nulo então PtDFila↑.Prim ← PtNovo senão (PtDFila↑.Ult)↑.Prox ← PtNovo PtDFila↑.Ult ← PtNovofim
![Page 56: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/56.jpg)
Estruturas de Dados 56
Filas por encadeamento
Remoção de um nodo de fila encadeada
PtDFila Prim Ult
/
PtDFila Prim Ult
/
PtDFila Prim Ult
/
PtDFila Prim Ult
![Page 57: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/57.jpg)
Estruturas de Dados 57
Algoritmo: Algoritmo: Remover um nodo de Fila Encadeadaendereçada por descritor
Filas por encadeamento
Algoritmo 4.17 - RemoverFilaEnc Entrada: PtDFila (TipoPtDFila) Saída: Sucesso (lógico) Variável auxiliar: PtAux (TipoPtNodo)início se PtDFila↑.Prim ≠ nulo então início PtAux ← PtDFila↑.Prim PtDFila↑.Prim ← PtAux↑.Elo liberar(PtAux) se PtDFila↑.Prim = nulo então PtDFila↑.Ult ← nulo Sucesso ← verdadeiro fimsenão Sucesso ← falsofim
![Page 58: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/58.jpg)
Estruturas de Dados 58
PtDFila Prim Ult
/??
Filas por encadeamento
Remoção de um nodo de fila encadeada
• Só o nodo do início da fila pode ser acessado
• Acessado diretamente pelo endereço no descritor
![Page 59: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/59.jpg)
Estruturas de Dados 59
Algoritmo: Algoritmo: Consultar Fila Encadeada endereçada por descritor
Filas por encadeamento
Algoritmo 4.18 - ConsultarFilaEnc Entrada: PtDFila (TipoPtDFila) Saídas: Valor (TipoInfo) Sucesso (lógico)início se PtDFila↑.Prim ≠ nulo então início Valor ← PtDFila↑.Prim↑.Info Sucesso ← verdadeiro fim senão Sucesso ← falsofim
![Page 60: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/60.jpg)
Estruturas de Dados 60
Filas por encadeamento
Destruição de fila encadeada
PtDFila
/
Prim Ult
PtDFila Prim Ult
PtDFila = nulo
Liberar posições
ocupadas pela lista
Liberar descritor
![Page 61: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/61.jpg)
Estruturas de Dados 61
Algoritmo: Algoritmo: Destruir Fila Encadeada endereçada por descritor
Filas por encadeamento
Algoritmo 4.19 - DestruirFilaEnc Entrada: PtDFila (TipoPtDFila) Saída: PtDFila (TipoPtDFila) Variáveis auxiliares: P1, P2 (TipoPtNodo)início se PtDFila↑.Prim ≠ nulo então início P1 ← PtDFila↑.Prim repita P2 ← P1↑.Elo liberar(P1) P1 ← P2 até P1 = nulo fim liberar(PtDFila) PtDFila ← nulofim
![Page 62: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/62.jpg)
Estruturas de Dados 62
Filas
Fila dupla - Deque
![Page 63: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/63.jpg)
Estruturas de Dados 63
ConsultasConsultas
Início Final
Exclusões
Inserções
Exclusões
Inserções
Fila dupla
Fila dupla - Deque
• Inserção, remoção e acesso às duas extremidades
![Page 64: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/64.jpg)
Estruturas de Dados 64
Operações válidas:Operações válidas:
• Criar uma fila dupla vazia
• Inserir um nodo no início
• Inserir um nodo no fim
• Excluir um nodo do início
• Excluir um nodo do fim
• Consultar / modificar nodo do início ou do fim
• Destruir a fila dupla
Fila dupla
Fila dupla - Deque
![Page 65: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/65.jpg)
Estruturas de Dados 65
Fila dupla
Fila dupla implementada por contiguidade física
![Page 66: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/66.jpg)
Estruturas de Dados 66
LI : limite inferior da área no arranjoIF : início da filaFF : final da filaLS : limite superior da área disponível
1 2 3 4 5 6 7 8 9 10 12 13 14
LI LSIF FF
Deque
Fila dupla por contiguidade
Fila dupla implementada sobre arranjo
ConsultasConsultas
Início Final
Exclusões
Inserções
Exclusões
Inserções
TipoFila = arranjo [1..N] de TipoNodo
Tipo de dados para fila dupla por contiguidade:
![Page 67: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/67.jpg)
Estruturas de Dados 67
Criação de uma fila dupla
• Inicializar indicadores de início e final da fila
dupla
• Fila criada vazia
0 1 2 3 4 5 6 7 8 9 10 12 13 14
LI LSIF
FF
Deque
Fila dupla por contiguidade
![Page 68: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/68.jpg)
Estruturas de Dados 68
Algoritmo: Algoritmo: Inicializar Deque implementada sobre Arranjo
Algoritmo 4.20 - InicializarDequeArr Entrada: LI (inteiro) Saídas: IF, FF (inteiros)início IF ← FF ← LI – 1fim
Fila dupla por contiguidade
![Page 69: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/69.jpg)
Estruturas de Dados 69
Inserção de um nodo em uma fila dupla
Fila dupla por contiguidade
• A inserção pode ser feita em qualquer uma das duas extremidades
• Definir em qual extremidade deve ser inserido o novo nodo
• Ocupação circular do arranjo
Início Final
Inserção Inserção
![Page 70: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/70.jpg)
Estruturas de Dados 70
LSFFLI
DEQUE1 2 3 4 5 6 7 8 9 10 12 13 14
LSFFIFLI1 2 3 4 5 6 7 8 9 10 12 13 14
IF
DEQUE
LSFF
LI1 2 3 4 5 6 7 8 9 10 12 13 14
LSFF
IFLI1 2 3 4 5 6 7 8 9 10 12 13 14
IF
DEQUE
DEQUE
Inserção no final
Ocupação circular do arranjo:
Fila dupla por contiguidade
![Page 71: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/71.jpg)
Estruturas de Dados 71
LSFFLI
DEQUE1 2 3 4 5 6 7 8 9 10 12 13 14
LSFFIFLI1 2 3 4 5 6 7 8 9 10 12 13 14
IF
DEQUE
LSFFLI1 2 3 4 5 6 7 8 9 10 12 13 14
LSFFIF
LI1 2 3 4 5 6 7 8 9 10 12 13 14
IF
DEQUE
DEQUE
Inserção no início
Ocupação circular do arranjo:
Fila dupla por contiguidade
![Page 72: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/72.jpg)
Estruturas de Dados 72
Algoritmo: Algoritmo: Inserir um nodo no Início de Dequeimplementada sobre ArranjoAlgoritmo 4.21 - InserirIniDequeArr Entrada: Deque (TipoDequeArr) LI, LS, IF, FF (inteiros) Info (TipoNodo) Saídas: Deque (TipoDequeArr) IF, FF (inteiros) Sucesso (lógico)início se ((FF = IF - 1) ou ((IF = LI) e (FF = LS))) então Sucesso ← falso senão início Sucesso ← verdadeiro se IF = LI – 1 {DEQUE VAZIA} então IF ← FF ← LI senão se IF > LI então IF ← IF – 1 senão IF ← LS Deque[IF] ← Info fimfim
![Page 73: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/73.jpg)
Estruturas de Dados 73
Remoção de um nodo de uma fila dupla
Fila dupla por contiguidade
• A remoção pode ser feita em qualquer uma das duas extremidades
• Definir de qual extremidade deve ser removido o novo nodo
Início Final
Remoção Remoção
![Page 74: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/74.jpg)
Estruturas de Dados 74
Algoritmo: Algoritmo: Remover o nodo do Fim da Dequeimplementada sobre Arranjo
Algoritmo 4.22 - RemoverFimDequeArr Entradas: LI, LS, IF, FF (inteiros) Saídas: IF, FF (inteiros) Sucesso (lógico)início se IF ≠ LI – 1 então início se IF = FF {DEQUE VAI FICAR VAZIA} então IF ← FF ← LI - 1 senão se FF = LI então FF ← LS senão FF ← FF - 1 Sucesso ← verdadeiro fim senão Sucesso ← falsofim
![Page 75: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/75.jpg)
Estruturas de Dados 75
Acesso a uma fila dupla
Fila dupla por contiguidade
Início Final
Acesso Acesso
• Somente os nodos das duas extremidades podem ser acessados
![Page 76: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/76.jpg)
Estruturas de Dados 76
Algoritmo: Algoritmo: Consultar qual o Maior valor contido nas extremidades de uma Deque implementada sobre Arranjo
Algoritmo 4.23 - ConsultarMaiorDequeArr Entradas: Deque (TipoDequeArr) LI, IF, FF (inteiros) Saída: MaiorValor (inteiro)início se IF = LI - 1 então MaiorValor ← 0 senão se Deque[IF] > Deque[FF] então MaiorValor ← Deque[IF] senão MaiorValor ← Deque[FF]fim
![Page 77: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/77.jpg)
Estruturas de Dados 77
Fila dupla
Fila dupla implementada por contiguidade física
![Page 78: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/78.jpg)
Estruturas de Dados 78
F1 FnF3F2
PtFilaDupla
Início
Final
Fila dupla implementada por encadeamento
Fila dupla por encadeamento
Exclusões
InserçõesAcesso
Exclusões
InserçõesAcesso
Para acessar o último nodo, é necessário percorrer toda a lista a partir do primeiro nodo
![Page 79: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/79.jpg)
Estruturas de Dados 79
Fila dupla encadeada com descritorFila dupla por encadeamento
PtDFD
/
Prim Ult
Na remoção do último nodo, precisa atualizar descritor
que passará a apontar para o penúltimo – percorrer a
fila do início para chegar ao penúltimo
![Page 80: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/80.jpg)
Estruturas de Dados 80
TipoNodo = registro Ant: TipoPtNodo Info: TipoInfoNodo Prox: TipoPtNodo
fim registro
Tipo de dados para nodos da fila dupla:
TipoDDeque = registro Prim: TipoPtNodo Ult: TipoPtNodo fim registoTipoPtDDeque = ↑TipoDDeque
Tipo de dados para o descritor da fila dupla:
Descritor
Prim: primeiro da filaUlt : último da fila
PtDFDPrim Ult
Ant Info Prox
Fila dupla – duplo encadeamento e descritor
Fila dupla por encadeamento
![Page 81: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/81.jpg)
Estruturas de Dados 81
Criação de fila dupla encadeada
Fila dupla por encadeamento
• Alocação do descritor
• Inicialização do descritor para fila dupla vazia
PtDFDPrim Ult
![Page 82: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/82.jpg)
Estruturas de Dados 82
Algoritmo 4.24 - CriarDequeEnc Entradas: - Saída: PtDDeque (TipoPtDDeque)início alocar(PtDDeque) PtDDeque↑.Prim ← PtDDdeque↑.Ult ← nulo fim
Algoritmo: Algoritmo: Criar Deque implementada por Encadeamento
Fila dupla por encadeamento
![Page 83: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/83.jpg)
Estruturas de Dados 83
Inserção de um novo nodo
Fila dupla por encadeamento
PtDFDPrim Ult
PtDFDPrim Ult
A
CA B
B N
N
C
PtDFDPrim Ult
CA B
No início
No final
![Page 84: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/84.jpg)
Estruturas de Dados 84
Algoritmo: Algoritmo: Inserir nodo em Deque Encadeada
Algoritmo 4.25 - InserirDequeEnc Entradas: PtDeque (TipoPtDeque) Lado (caractere) Valor (TipoInfoNodo) Saída: Sucesso (lógico)var PtNovo (TipoPtNodo)início Sucesso ← falso se (Lado = “I”) ou (Lado = “F”) então início Sucesso ← verdadeiro alocar(PtNovo) PtNovo↑.Info ← Valor se Lado = “I” { então início {INSERE NO INÍCIO} SEGUE }
Fila dupla por encadeamento
![Page 85: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/85.jpg)
Estruturas de Dados 85
então início {INSERE NO INÍCIO} PtNovo↑.Ant ← nulo se PtDDeque↑.Prim = nulo então início PtDDeque↑.Ult ← PtNovo PtNovo↑.Prox ← nulo fim senão início PtNovo↑.Prox ← PtDDeque↑.Prim (PtDDeque↑.Prim)↑.Ant ← PtNovo fim PtDDeque↑.Prim ← PtNovo fim senão início {INSERE NO FINAL} PtNovo↑.Prox ← nulo se PtDDeque↑.Prim = nulo então início PtNovo↑.Ant ← nulo PtDDeque↑.Prim ← PtNovo fim senão início (PtDDeque↑.Ult)↑.Prox ← PtNovo PtNovo↑.Ant ← PtDDeque↑.Ult fim PtDDeque↑.Ult ← PtNovo fim fimfim
Algoritmo (cont): Algoritmo (cont): Inserir nodo em Deque Encadeada
![Page 86: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/86.jpg)
Estruturas de Dados 86
Remoção de um nodo
Fila dupla por encadeamento
PtDFDPrim Ult
PtDFDPrim Ult
A
CA B
B X
X
C
Do final
Do início
PtDFDPrim Ult
CA B
![Page 87: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/87.jpg)
Estruturas de Dados 87
Algoritmo: Algoritmo: Remover nodo de Deque Encadeada
Fila dupla por encadeamento
Algoritmo 4.26 - RemoverDequeEnc Entradas: PtDDeque (TipoPtDDeque) Lado (caractere) Saída: Sucesso (lógico)var PtAux, PtAnt (TipoPtNodo);início Sucesso ← falso se (PtDDeque↑.Prim ≠ nulo) e ((Lado = “I”) ou (Lado = “F”)) então início Sucesso ← verdadeiro se Lado = “I” { então início {REMOVE O PRIMEIRO} SEGUE }
![Page 88: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/88.jpg)
Estruturas de Dados 88
então início {REMOVE O PRIMEIRO} PtAux ← PtDDeque↑.Prim se PtDDeque↑.Prim = PtDDeque↑.Ult então PtDDeque↑.Prim ← PtDDeque↑.Ult ← nulo senão início PtDDeque↑.Prim ← PtAux↑.Prox (PtDDeque↑.Prim)↑.Ant ← nulo fim fim senão início {REMOVE O ÚLTIMO} PtAux ← PtDDeque↑.Ult se PtDDeque↑.Prim = PtDDeque↑.Ult então PtDDeque↑.Prim ← PtDDeque↑.Ult ← nulo senão início PtDDeque↑.Ult ← PtAux↑.Ant (PtDDeque↑.Ult)↑.Prox ← nulo fim fim liberar(PtAux) fimfim
Algoritmo (cont.): Algoritmo (cont.): Remover nodo de Deque Encadeada
![Page 89: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/89.jpg)
Estruturas de Dados 89
Acesso a fila dupla encadeada
Fila dupla por encadeamento
Início FinalAcesso Acesso
PtDFD
Prim Ult
CA BX
• Podem ser acessados o primeiro e último nodo
• Endereços diretamente no descritor
![Page 90: Pilhas e Filas](https://reader034.fdocumentos.com/reader034/viewer/2022052304/5597c5771a28abd0098b4677/html5/thumbnails/90.jpg)
Estruturas de Dados 90
Algoritmo: Algoritmo: Consultar Deque implementada por Encadeamento
Fila dupla por encadeamento
Algoritmo 4.27 - ConsultarDequeEnc Entradas: PtDDeque (TipoPtDDeque) Lado (caractere) Saídas: Valor (TipoInfoNodo) Sucesso (lógico)início Sucesso ← falso se (PtDDeque↑.Prim ≠ nulo) e ((Lado = “I”) ou (Lado = “F”)) então início Sucesso ← verdadeiro se Lado = “I” então Valor ← (PtDDeque↑.Prim).Info senão Valor ← (PtDDeque↑.Ult).Info; fimfim