SlideShare uma empresa Scribd logo
1 de 90
Pilhas e filas Estudo de listas lineares especiais, com disciplina restrita de organização e de acesso a seus nodos
Pilhas e filas Disciplina restrita  acesso permitido   somente em alguns  n odo s Com disciplina restrita de organização e acesso a seus nodos Listas lineares especiais
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
Pilhas e Filas Consultas Exclusões Inserções Topo Base Início Final Inserções Exclusões e Consultas PILHA FILA
Filas Duplas ,[object Object],[object Object],exclusões inserções exclusões inserções
Pilhas e filas Pilhas
[object Object],[object Object],[object Object],[object Object],[object Object],Operações sobre Pilhas Pilhas Consultas Exclusões Inserções Topo Base
Pilhas Pilhas implementadas por contiguidade física
Pilha  -  contig u idade   física   Pilha – contiguidade física ,[object Object],[object Object],[object Object],[object Object],[object Object],Lim Topo Base Pilha Índices do arranjo
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 1 3 LIM TOPO BASE 10 9 8 7 6 5 4 3 2 1 3 7 LIM TOPO BASE 10 9 8 7 6 5 4 3 2 1 3 7 5 LIM TOPO BASE 10 9 8 7 6 5 4 3 2 1 3 7 LIM TOPO BASE 10 9 8 7 6 5 4 3 2 1 PILHA PILHA PILHA PILHA
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: ,[object Object],[object Object],[object Object],[object Object]
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 Exemplo: Base    1 Topo    Base – 1 Lim    6   Criação da pilha Pilha – contiguidade física Lim Topo Base Pilha 10 9 8 7 6 5 4 3 2 1
Algoritmo 4.1 -  InicializarPilhaArr   Entrada:  Base (inteiro) Saída:  Topo (inteiro) início Topo    Base – 1 fim  Algoritmo:  Inicializar Pilhas implementada sobre Arranjo Pilha – contiguidade física
Inserção de um nodo na pilha Pilha – contiguidade física 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
Pilha – contiguidade física 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    falso fim
Pilha – contiguidade física Remoçã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
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    falso fim  Algoritmo:  Remover nodo do topo de Pilha implementada sobre Arranjo
Pilha – contiguidade física Acesso à pilha ,[object Object],[object Object],? Lim Topo Base Pilha 10 9 8 7 6 5 4 3 2 1
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    falso fim  Algoritmo:  Consultar nodo do topo de Pilha implementada sobre Arranjo
Pilhas Pilhas implementadas por encadeamento
Pilha implementada por encadeamento TipoNodo = registro Info: TipoInfo Elo: TipoPtNodo fim registro Tipo de dados utilizado nos algoritmos: Base Topo inserções remoções ? consultas PtPilha Info  Elo Topo da pilha Base da pilha Endereço do topo da pilha
Pilha por encadeamento Criação de pilha encadeada ,[object Object],[object Object]
Algoritmo:  Criar Pilha Encadeada Pilha por encadeamento Algoritmo 4.5 -  CriarPilhaEnc   Entradas:  - Saída:  PtPilha (TipoPtNodo) início PtPilha    nulo fim
Inserção   de  um  nodo  em pilha encadeada Pilha por encadeamento ,[object Object],Topo Topo PtPilha PtPilha Topo Novo nodo Base Base
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    PtNovo fim  Algoritmo:  Inserir nodo em Pilha Encadeada Pilha por encadeamento
Remo ção   de  um  nodo de  uma   pilha   encadeada Pilha por encadeamento ,[object Object],PtPilha Topo Topo PtPilha Base Base Nodo a ser removido
Pilha por encadeamento 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    falso fim
Acesso   à pilha encadeada   Pilha por encadeamento ,[object Object],Topo PtPilha Base Nodo que pode ser acessado
Pilha por encadeamento 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  fim fim
Pilha por encadeamento Algoritmo: Desempilhar Consulta 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) fim fim
Destruição de uma pilha encadeada  Pilha por encadeamento ,[object Object],[object Object],PtPilha = nil Base Topo Base Topo Base Topo Base Topo PtPilha PtPilha PtPilha
Pilha por encadeamento 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) fim fim
Pilhas e filas Filas
Filas ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Filas Inserções Exclusões e Consultas Final Início
Filas Filas implementadas por contiguidade física
LI  : limite inferior da área IF  : início da fila FF : final da fila LS : limite superior da área Fila vazia IF = 0 Fila implementada sobre arranjo Fila por contiguidade Inserções Exclusões e Consultas 1  2  3  4  5  6  7  8  9  10  12  13  14 LI LS IF FF FILA
Evolução da Fila Fila por contiguidade ,[object Object],[object Object],[object Object],[object Object],[object Object],FILA 1 2 4 3 6 5 1 2 4 3 6 5 FILA LI=IF=FF LS 3 1 2 4 3 6 5 FILA LI=IF LS 3 7 FF 1 2 4 3 6 5 FILA LI=IF LS 3 7 5 FF 1 2 4 3 6 5 FILA LI LS 7 5 FF IF
Ocupação circular do arranjo Fila por contiguidade LS FF IF LI FILA 1  2  3  4  5  6  7  8  9  10  12  13  14 1  2  3  4  5  6  7  8  9  10  12  13  14 LS FF IF LI FILA 1  2  3  4  5  6  7  8  9  10  12  13  14 LS FF IF LI FILA 1  2  3  4  5  6  7  8  9  10  12  13  14 LS FF IF LI FILA 1  2  3  4  5  6  7  8  9  10  12  13  14 LS FF IF LI FILA
Operações sobre Filas implementadas por contiguidade Fila por contiguidade ,[object Object],[object Object],[object Object],[object Object],TipoFila = arranjo [1..N] de TipoNodo Tipo de dados  utilizado nos algoritmos para fila implementada por contiguidade física:
Criação de uma fila Fila por contiguidade ,[object Object],... ... FF IF  LI  LS Espaço disponível para a fila FILA
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 – 1 fim
Inserção de um nodo em uma fila Fila por contiguidade ,[object Object],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
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    falso fim
Remoção de um nodo de uma fila Fila por contiguidade ,[object Object],1  2  3  4  5  6  7  8  9  10  12  13  14 LS FF IF LI FILA 1  2  3  4  5  6  7  8  9  10  12  13  14 LS FF IF LI FILA Nodo que pode ser removido
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    falso fim
Acesso à fila Fila por contiguidade ,[object Object],[object Object],? ... ... LS FF IF LI Nodo que pode ser acessado
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    falso fim
Filas Filas implementadas por encadeamento
Filas implementadas por encadeamento Filas por encadeamento TipoNodo = registro Info: TipoInfo Elo: TipoPtNodo fim registro Tipo de dados para nodos da fila: Inserções Exclusões  e Consultas Final Frente F1 Fn F3 F2 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
Descritor Prim : primeiro da fila Ult  : último da fila Filas por encadeamento com descritor Filas por encadeamento PtDF Prim  Ult L1 L2 L4 L3 TipoDFila = registro Prim: TipoPtNodo Ult: TipoPtNodo fim registro TipoPtDFila =   TipoDFila Tipo de dados para o descritor da fila:
Operações sobre Filas   implementadas por  encadeamento com   descritor ,[object Object],[object Object],[object Object],[object Object],[object Object],Filas por encadeamento
Filas por encadeamento ,[object Object],[object Object],[object Object],Criação da fila encadeada PtDF Prim  Ult
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
Filas por encadeamento Inserção de um nodo na fila encadeada PtDFila Prim  Ult / PtDFila Prim  Ult PtDFila Prim  Ult PtDFila Prim  Ult
Algoritmo:  Inserir novo nodo em Fila Encadeada endereç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    PtNovo fim
Filas por encadeamento Remoção de um nodo de fila encadeada PtDFila Prim Ult / PtDFila Prim Ult / PtDFila Prim  Ult / PtDFila Prim  Ult
Algoritmo:  Remover um nodo de Fila Encadeada endereç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 fim senão Sucesso    falso fim
Filas por encadeamento Remoção de um nodo de fila encadeada ,[object Object],[object Object],PtDFila Prim  Ult / ?
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    falso fim
Filas por encadeamento Destruição de fila encadeada PtDFila / Prim  Ult PtDFila Prim  Ult PtDFila = nulo Liberar posições ocupadas pela lista Liberar descritor
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    nulo fim
Filas Fila dupla - Deque
Fila dupla Fila dupla - Deque ,[object Object],Consultas Consultas Início Final Exclusões Inserções Exclusões Inserções
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Fila dupla Fila dupla - Deque
Fila dupla Fila dupla implementada por contiguidade física
LI  : limite inferior da área no arranjo IF  : início da fila FF  : final da fila LS : limite superior da área disponível Fila dupla por contiguidade Fila dupla implementada sobre arranjo TipoFila = arranjo [1..N] de TipoNodo Tipo de dados para fila dupla por contiguidade: 1  2  3  4  5  6  7  8  9  10  12  13  14 LI LS IF FF Deque Consultas Consultas Início Final Exclusões Inserções Exclusões Inserções
Criação de uma fila dupla ,[object Object],[object Object],Fila dupla por contiguidade 0  1  2  3  4  5  6  7  8  9  10  12  13  14 LI LS IF FF Deque
Algoritmo:  Inicializar Deque implementada sobre Arranjo Algoritmo 4.20 -  InicializarDequeArr   Entrada:  LI (inteiro) Saídas:  IF, FF (inteiros) início IF    FF    LI – 1 fim  Fila dupla por contiguidade
Inserção de um nodo em uma fila dupla Fila dupla por contiguidade ,[object Object],[object Object],[object Object],Início Final Inserção Inserção
Inserção  no final Ocupação circular do arranjo: Fila dupla por contiguidade LS FF LI DEQUE 1  2  3  4  5  6  7  8  9  10  12  13  14 LS FF IF LI 1  2  3  4  5  6  7  8  9  10  12  13  14 IF DEQUE LS FF LI 1  2  3  4  5  6  7  8  9  10  12  13  14 LS FF IF LI 1  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 LS FF LI DEQUE 1  2  3  4  5  6  7  8  9  10  12  13  14 LS FF IF LI 1  2  3  4  5  6  7  8  9  10  12  13  14 IF DEQUE LS FF LI 1  2  3  4  5  6  7  8  9  10  12  13  14 LS FF IF LI 1  2  3  4  5  6  7  8  9  10  12  13  14 IF DEQUE DEQUE
Algoritmo:  Inserir um nodo no Início de Deque implementada sobre Arranjo Algoritmo 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 fim fim
Remoção de um nodo de uma fila dupla Fila dupla por contiguidade ,[object Object],[object Object],Início Final Remoção Remoção
Algoritmo:  Remover o nodo do Fim da Deque implementada 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    falso fim
Acesso a uma fila dupla Fila dupla por contiguidade ,[object Object],Início Final Acesso Acesso
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
Fila dupla Fila dupla implementada por contiguidade física
Fila dupla implementada por encadeamento Fila dupla por encadeamento Para acessar o último nodo, é necessário percorrer toda a lista a partir do primeiro nodo F1 Fn F3 F2 PtFila Dupla Início Final Exclusões Inserções Acesso Exclusões Inserções Acesso
Fila dupla encadeada com descritor Fila 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
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 registo TipoPtDDeque =   TipoDDeque Tipo de dados para o  descritor  da fila dupla: Descritor Prim : primeiro da fila Ult  : último da fila Fila dupla – duplo encadeamento e descritor Fila dupla por encadeamento PtDFD Prim  Ult Ant  Info  Prox
Criação de fila dupla encadeada Fila dupla por encadeamento ,[object Object],[object Object],PtDFD Prim  Ult
Algoritmo 4.24 -  CriarDequeEnc  Entradas:  - Saída:  PtDDeque (TipoPtDDeque) início alocar(PtDDeque) PtDDeque  .Prim    PtDDdeque  .Ult    nulo  fim  Algoritmo:  Criar Deque implementada por Encadeamento Fila dupla por encadeamento
Inserção de um novo nodo Fila dupla por encadeamento PtDFD Prim  Ult PtDFD Prim  Ult A C A B B N N C PtDFD Prim  Ult C A B No início No final
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
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 fim fim  Algoritmo (cont):  Inserir nodo em Deque Encadeada
Remoção de um nodo Fila dupla por encadeamento PtDFD Prim  Ult PtDFD Prim  Ult A C A B B X X C Do final Do início PtDFD Prim  Ult C A B
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  }
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)  fim fim  Algoritmo (cont.):  Remover nodo de Deque Encadeada
Acesso a fila dupla encadeada Fila dupla por encadeamento Início Final Acesso Acesso ,[object Object],[object Object],PtDFD Prim  Ult C A B X
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; fim fim

Mais conteúdo relacionado

Mais procurados

Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Adriano Teixeira de Souza
 
Árvores: Conceitos e binárias
Árvores:  Conceitos e bináriasÁrvores:  Conceitos e binárias
Árvores: Conceitos e bináriasSérgio Souza Costa
 
Queue as data_structure
Queue as data_structureQueue as data_structure
Queue as data_structureeShikshak
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADLeinylson Fontinele
 
Listas duplamente encadeadas
Listas duplamente encadeadasListas duplamente encadeadas
Listas duplamente encadeadasJailson Torquato
 
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysEstrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysLoiane Groner
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasAdriano Teixeira de Souza
 
Inserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista EncadeadaInserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista EncadeadaElaine Cecília Gatto
 
Estruturas de Dados - Tabelas de Espalhamento (Hash Table)
Estruturas de Dados - Tabelas de Espalhamento (Hash Table)Estruturas de Dados - Tabelas de Espalhamento (Hash Table)
Estruturas de Dados - Tabelas de Espalhamento (Hash Table)Erick Petrucelli
 
Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisFabrício Lopes Sanchez
 
Estrutura de Dados Apoio (Complexidade de Algoritmos)
Estrutura de Dados Apoio (Complexidade de Algoritmos)Estrutura de Dados Apoio (Complexidade de Algoritmos)
Estrutura de Dados Apoio (Complexidade de Algoritmos)Leinylson Fontinele
 
Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...
Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...
Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...Alex Camargo
 

Mais procurados (20)

Aula 10
Aula 10 Aula 10
Aula 10
 
Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada Estrutura de dados em Java - Filas com lista encadeada
Estrutura de dados em Java - Filas com lista encadeada
 
Árvores: Conceitos e binárias
Árvores:  Conceitos e bináriasÁrvores:  Conceitos e binárias
Árvores: Conceitos e binárias
 
Queue as data_structure
Queue as data_structureQueue as data_structure
Queue as data_structure
 
Estrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas EncadeadasEstrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas Encadeadas
 
Data structure Stack
Data structure StackData structure Stack
Data structure Stack
 
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TADEstrutura de Dados - Aula 02 - Estrutura de Dados e TAD
Estrutura de Dados - Aula 02 - Estrutura de Dados e TAD
 
Algoritmos de busca
Algoritmos de buscaAlgoritmos de busca
Algoritmos de busca
 
Listas duplamente encadeadas
Listas duplamente encadeadasListas duplamente encadeadas
Listas duplamente encadeadas
 
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysEstrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
 
Queue Data Structure
Queue Data StructureQueue Data Structure
Queue Data Structure
 
Aula 07 - lista linear
Aula 07 - lista linearAula 07 - lista linear
Aula 07 - lista linear
 
Estrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores BináriasEstrutura de dados em Java - Árvores Binárias
Estrutura de dados em Java - Árvores Binárias
 
Inserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista EncadeadaInserindo em Ordem Crescente na Lista Encadeada
Inserindo em Ordem Crescente na Lista Encadeada
 
Linked list
Linked listLinked list
Linked list
 
Estruturas de Dados - Tabelas de Espalhamento (Hash Table)
Estruturas de Dados - Tabelas de Espalhamento (Hash Table)Estruturas de Dados - Tabelas de Espalhamento (Hash Table)
Estruturas de Dados - Tabelas de Espalhamento (Hash Table)
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
Estrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentaisEstrutura de Dados - Conceitos fundamentais
Estrutura de Dados - Conceitos fundamentais
 
Estrutura de Dados Apoio (Complexidade de Algoritmos)
Estrutura de Dados Apoio (Complexidade de Algoritmos)Estrutura de Dados Apoio (Complexidade de Algoritmos)
Estrutura de Dados Apoio (Complexidade de Algoritmos)
 
Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...
Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...
Algoritmos e Programação: Funcionamento do computador. Conceito e definição d...
 

Destaque (20)

Aula 01 -_pilhas_e_filas_com_vetores-oop
Aula 01 -_pilhas_e_filas_com_vetores-oopAula 01 -_pilhas_e_filas_com_vetores-oop
Aula 01 -_pilhas_e_filas_com_vetores-oop
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em pythonIntrodução a estruturas de dados em python
Introdução a estruturas de dados em python
 
Fila de prioridades
Fila de prioridadesFila de prioridades
Fila de prioridades
 
Aula01 - estrutura de dados
Aula01 - estrutura de dadosAula01 - estrutura de dados
Aula01 - estrutura de dados
 
Estruturas de dados
Estruturas de dadosEstruturas de dados
Estruturas de dados
 
Cap16 Arquivos Slides
Cap16 Arquivos SlidesCap16 Arquivos Slides
Cap16 Arquivos Slides
 
Pilha em C
Pilha em CPilha em C
Pilha em C
 
Listas em C
Listas em CListas em C
Listas em C
 
Pged 06
Pged 06Pged 06
Pged 06
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Amplificador de potencia
Amplificador de potenciaAmplificador de potencia
Amplificador de potencia
 
Aula02 Pilhas
Aula02   PilhasAula02   Pilhas
Aula02 Pilhas
 
Aula03 Filas
Aula03   FilasAula03   Filas
Aula03 Filas
 
Listas Lineares - Parte 2
Listas Lineares - Parte 2Listas Lineares - Parte 2
Listas Lineares - Parte 2
 
Ed1
Ed1Ed1
Ed1
 
6.queue
6.queue6.queue
6.queue
 
Listas Lineares - Parte 1
Listas Lineares - Parte 1Listas Lineares - Parte 1
Listas Lineares - Parte 1
 
Pilha e Fila Dinamica
Pilha e Fila DinamicaPilha e Fila Dinamica
Pilha e Fila Dinamica
 
Estrutura de Dados Aula 05 - Filas Estáticas
Estrutura de Dados  Aula 05 - Filas EstáticasEstrutura de Dados  Aula 05 - Filas Estáticas
Estrutura de Dados Aula 05 - Filas Estáticas
 
Teoria das Filas
Teoria das FilasTeoria das Filas
Teoria das Filas
 

Semelhante a Pilhas e Filas

Semelhante a Pilhas e Filas (9)

Filas encadeadas
Filas encadeadasFilas encadeadas
Filas encadeadas
 
Pilhas e Filas.ppt
Pilhas e Filas.pptPilhas e Filas.ppt
Pilhas e Filas.ppt
 
Pilhas e filas
Pilhas e filasPilhas e filas
Pilhas e filas
 
Aula 9
Aula 9Aula 9
Aula 9
 
LIVRO PROPRIETÁRIO - ESTRUTURA DE DADOS
LIVRO PROPRIETÁRIO - ESTRUTURA DE DADOSLIVRO PROPRIETÁRIO - ESTRUTURA DE DADOS
LIVRO PROPRIETÁRIO - ESTRUTURA DE DADOS
 
6 alocacao sequencial - pilhas
6   alocacao sequencial - pilhas6   alocacao sequencial - pilhas
6 alocacao sequencial - pilhas
 
Aula 8
Aula 8Aula 8
Aula 8
 
Slides pilhas e_filas
Slides  pilhas e_filasSlides  pilhas e_filas
Slides pilhas e_filas
 
Aula_05_-_Listas_Duplamente_Encadeadas.ppt
Aula_05_-_Listas_Duplamente_Encadeadas.pptAula_05_-_Listas_Duplamente_Encadeadas.ppt
Aula_05_-_Listas_Duplamente_Encadeadas.ppt
 

Mais de CriatividadeZeroDocs

Mais de CriatividadeZeroDocs (10)

Aquece Para a prova de EDA3
Aquece Para a prova de EDA3Aquece Para a prova de EDA3
Aquece Para a prova de EDA3
 
Introdução a estrutura de dados
Introdução a estrutura de dadosIntrodução a estrutura de dados
Introdução a estrutura de dados
 
Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)
Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)
Projetos de algoritmos com implementações em pascal e c (nivio ziviani, 4ed)
 
Coalesced hashing / Hash Coalescido
Coalesced hashing / Hash CoalescidoCoalesced hashing / Hash Coalescido
Coalesced hashing / Hash Coalescido
 
Implementação do Hash Coalha/Coalesced
Implementação do Hash Coalha/CoalescedImplementação do Hash Coalha/Coalesced
Implementação do Hash Coalha/Coalesced
 
Exercício sobre hashing
Exercício sobre hashingExercício sobre hashing
Exercício sobre hashing
 
Aula sobre Tabela Hash
Aula sobre Tabela HashAula sobre Tabela Hash
Aula sobre Tabela Hash
 
Operadores Lineares
Operadores LinearesOperadores Lineares
Operadores Lineares
 
Machado de assis
Machado de assisMachado de assis
Machado de assis
 
áLbum de fotografias
áLbum de fotografiasáLbum de fotografias
áLbum de fotografias
 

Pilhas e Filas

  • 1. Pilhas e filas Estudo de listas lineares especiais, com disciplina restrita de organização e de acesso a seus nodos
  • 2. Pilhas e filas Disciplina restrita acesso permitido somente em alguns n odo s Com disciplina restrita de organização e acesso a seus nodos Listas lineares especiais
  • 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
  • 4. Pilhas e Filas Consultas Exclusões Inserções Topo Base Início Final Inserções Exclusões e Consultas PILHA FILA
  • 5.
  • 6. Pilhas e filas Pilhas
  • 7.
  • 8. Pilhas Pilhas implementadas por contiguidade física
  • 9.
  • 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 1 3 LIM TOPO BASE 10 9 8 7 6 5 4 3 2 1 3 7 LIM TOPO BASE 10 9 8 7 6 5 4 3 2 1 3 7 5 LIM TOPO BASE 10 9 8 7 6 5 4 3 2 1 3 7 LIM TOPO BASE 10 9 8 7 6 5 4 3 2 1 PILHA PILHA PILHA PILHA
  • 11.
  • 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 Exemplo: Base  1 Topo  Base – 1 Lim  6 Criação da pilha Pilha – contiguidade física Lim Topo Base Pilha 10 9 8 7 6 5 4 3 2 1
  • 13. Algoritmo 4.1 - InicializarPilhaArr Entrada: Base (inteiro) Saída: Topo (inteiro) início Topo  Base – 1 fim Algoritmo: Inicializar Pilhas implementada sobre Arranjo Pilha – contiguidade física
  • 14. Inserção de um nodo na pilha Pilha – contiguidade física 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
  • 15. Pilha – contiguidade física 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  falso fim
  • 16. Pilha – contiguidade física Remoçã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
  • 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  falso fim Algoritmo: Remover nodo do topo de Pilha implementada sobre Arranjo
  • 18.
  • 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  falso fim Algoritmo: Consultar nodo do topo de Pilha implementada sobre Arranjo
  • 20. Pilhas Pilhas implementadas por encadeamento
  • 21. Pilha implementada por encadeamento TipoNodo = registro Info: TipoInfo Elo: TipoPtNodo fim registro Tipo de dados utilizado nos algoritmos: Base Topo inserções remoções ? consultas PtPilha Info Elo Topo da pilha Base da pilha Endereço do topo da pilha
  • 22.
  • 23. Algoritmo: Criar Pilha Encadeada Pilha por encadeamento Algoritmo 4.5 - CriarPilhaEnc Entradas: - Saída: PtPilha (TipoPtNodo) início PtPilha  nulo fim
  • 24.
  • 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  PtNovo fim Algoritmo: Inserir nodo em Pilha Encadeada Pilha por encadeamento
  • 26.
  • 27. Pilha por encadeamento 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  falso fim
  • 28.
  • 29. Pilha por encadeamento 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 fim fim
  • 30. Pilha por encadeamento Algoritmo: Desempilhar Consulta 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) fim fim
  • 31.
  • 32. Pilha por encadeamento 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) fim fim
  • 33. Pilhas e filas Filas
  • 34.
  • 35. Filas Filas implementadas por contiguidade física
  • 36. LI : limite inferior da área IF : início da fila FF : final da fila LS : limite superior da área Fila vazia IF = 0 Fila implementada sobre arranjo Fila por contiguidade Inserções Exclusões e Consultas 1 2 3 4 5 6 7 8 9 10 12 13 14 LI LS IF FF FILA
  • 37.
  • 38. Ocupação circular do arranjo Fila por contiguidade LS FF IF LI FILA 1 2 3 4 5 6 7 8 9 10 12 13 14 1 2 3 4 5 6 7 8 9 10 12 13 14 LS FF IF LI FILA 1 2 3 4 5 6 7 8 9 10 12 13 14 LS FF IF LI FILA 1 2 3 4 5 6 7 8 9 10 12 13 14 LS FF IF LI FILA 1 2 3 4 5 6 7 8 9 10 12 13 14 LS FF IF LI FILA
  • 39.
  • 40.
  • 41. 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 – 1 fim
  • 42.
  • 43. 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  falso fim
  • 44.
  • 45. 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  falso fim
  • 46.
  • 47. 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  falso fim
  • 48. Filas Filas implementadas por encadeamento
  • 49. Filas implementadas por encadeamento Filas por encadeamento TipoNodo = registro Info: TipoInfo Elo: TipoPtNodo fim registro Tipo de dados para nodos da fila: Inserções Exclusões e Consultas Final Frente F1 Fn F3 F2 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
  • 50. Descritor Prim : primeiro da fila Ult : último da fila Filas por encadeamento com descritor Filas por encadeamento PtDF Prim Ult L1 L2 L4 L3 TipoDFila = registro Prim: TipoPtNodo Ult: TipoPtNodo fim registro TipoPtDFila =  TipoDFila Tipo de dados para o descritor da fila:
  • 51.
  • 52.
  • 53. 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
  • 54. Filas por encadeamento Inserção de um nodo na fila encadeada PtDFila Prim Ult / PtDFila Prim Ult PtDFila Prim Ult PtDFila Prim Ult
  • 55. Algoritmo: Inserir novo nodo em Fila Encadeada endereç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  PtNovo fim
  • 56. Filas por encadeamento Remoção de um nodo de fila encadeada PtDFila Prim Ult / PtDFila Prim Ult / PtDFila Prim Ult / PtDFila Prim Ult
  • 57. Algoritmo: Remover um nodo de Fila Encadeada endereç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 fim senão Sucesso  falso fim
  • 58.
  • 59. 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  falso fim
  • 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
  • 61. 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  nulo fim
  • 62. Filas Fila dupla - Deque
  • 63.
  • 64.
  • 65. Fila dupla Fila dupla implementada por contiguidade física
  • 66. LI : limite inferior da área no arranjo IF : início da fila FF : final da fila LS : limite superior da área disponível Fila dupla por contiguidade Fila dupla implementada sobre arranjo TipoFila = arranjo [1..N] de TipoNodo Tipo de dados para fila dupla por contiguidade: 1 2 3 4 5 6 7 8 9 10 12 13 14 LI LS IF FF Deque Consultas Consultas Início Final Exclusões Inserções Exclusões Inserções
  • 67.
  • 68. Algoritmo: Inicializar Deque implementada sobre Arranjo Algoritmo 4.20 - InicializarDequeArr Entrada: LI (inteiro) Saídas: IF, FF (inteiros) início IF  FF  LI – 1 fim Fila dupla por contiguidade
  • 69.
  • 70. Inserção no final Ocupação circular do arranjo: Fila dupla por contiguidade LS FF LI DEQUE 1 2 3 4 5 6 7 8 9 10 12 13 14 LS FF IF LI 1 2 3 4 5 6 7 8 9 10 12 13 14 IF DEQUE LS FF LI 1 2 3 4 5 6 7 8 9 10 12 13 14 LS FF IF LI 1 2 3 4 5 6 7 8 9 10 12 13 14 IF DEQUE DEQUE
  • 71. Inserção no início Ocupação circular do arranjo: Fila dupla por contiguidade LS FF LI DEQUE 1 2 3 4 5 6 7 8 9 10 12 13 14 LS FF IF LI 1 2 3 4 5 6 7 8 9 10 12 13 14 IF DEQUE LS FF LI 1 2 3 4 5 6 7 8 9 10 12 13 14 LS FF IF LI 1 2 3 4 5 6 7 8 9 10 12 13 14 IF DEQUE DEQUE
  • 72. Algoritmo: Inserir um nodo no Início de Deque implementada sobre Arranjo Algoritmo 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 fim fim
  • 73.
  • 74. Algoritmo: Remover o nodo do Fim da Deque implementada 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  falso fim
  • 75.
  • 76. 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
  • 77. Fila dupla Fila dupla implementada por contiguidade física
  • 78. Fila dupla implementada por encadeamento Fila dupla por encadeamento Para acessar o último nodo, é necessário percorrer toda a lista a partir do primeiro nodo F1 Fn F3 F2 PtFila Dupla Início Final Exclusões Inserções Acesso Exclusões Inserções Acesso
  • 79. Fila dupla encadeada com descritor Fila 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
  • 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 registo TipoPtDDeque =  TipoDDeque Tipo de dados para o descritor da fila dupla: Descritor Prim : primeiro da fila Ult : último da fila Fila dupla – duplo encadeamento e descritor Fila dupla por encadeamento PtDFD Prim Ult Ant Info Prox
  • 81.
  • 82. Algoritmo 4.24 - CriarDequeEnc Entradas: - Saída: PtDDeque (TipoPtDDeque) início alocar(PtDDeque) PtDDeque  .Prim  PtDDdeque  .Ult  nulo fim Algoritmo: Criar Deque implementada por Encadeamento Fila dupla por encadeamento
  • 83. Inserção de um novo nodo Fila dupla por encadeamento PtDFD Prim Ult PtDFD Prim Ult A C A B B N N C PtDFD Prim Ult C A B No início No final
  • 84. 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
  • 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 fim fim Algoritmo (cont): Inserir nodo em Deque Encadeada
  • 86. Remoção de um nodo Fila dupla por encadeamento PtDFD Prim Ult PtDFD Prim Ult A C A B B X X C Do final Do início PtDFD Prim Ult C A B
  • 87. 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 }
  • 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) fim fim Algoritmo (cont.): Remover nodo de Deque Encadeada
  • 89.
  • 90. 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; fim fim