SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
Curso Superior de Tecnologia em Telemática
                         Programação e Estruturas de Dados

Filas – Fundamentos e Implementações
                                              Copyright©2010
                                              Prof. César Rocha
                                       cesarocha@ifpb.edu.br 1
Objetivos

§ Explorar os conceitos fundamentais acerca do uso
  de filas utilizando a linguagem C
   § Organização e implementação, características,
     vantagens, desvantagens, regras de utilização,
     operações básicas e algoritmos de implementação
§ Neste módulo, serão abordadas ainda as seguintes
  implementações de filas: seqüencial, encadeada
  e circular
§ Este módulo será utilizado como referência na
  entrega dos futuros projetos
   § Implementação das estruturas e algoritmos, criação
     das bibliotecas e práticas de laboratório
                                                          2
Motivação

§ Uma das estruturas de dados mais utilizadas em
  programação é a fila
  § Um exemplo de utilização em computação é a
    implementação de uma fila de impressão
§ Assim como na pilha, os acessos aos elementos em
  uma fila também seguem uma regra :
  § Lembre-se da pilha, onde: Last In First Out
  § Porém, uma fila é: First In First Out
§ A idéia fundamental
  § Só podemos inserir um novo nó no final da fila
  § Só podemos retirar a partir do início da fila         3
Estratégia

§ Pode-se fazer uma analogia com uma fila de clientes
  em um banco qualquer:
   § o primeiro a entrar na fila, será o primeiro a sair e ser
     atendido (retiramos ele do início ou frente da fila)
   § o último cliente deve entrar no final da fila e, portanto,
     será o último a sair (ou ser atendido) na fila
§ Portanto:
   § Não podemos retirar qualquer cliente da fila!
      § Apenas clientes que estão na frente da fila
   § Não podemos inserir um cliente na fila de tal forma
     que ele não seja o último no conjunto de clientes
                                                                  4
Propriedades

§ Propriedades de uma fila:
   §   Existem n elementos enfileirados;
   §   E1 é o elemento no início (ou frente) da fila;
   §   En é o último elemento da fila;
§ A inserção de um primeiro elemento E1 em uma fila
  vazia, torna-o o primeiro a sair da estrutura
§ Não se pode consultar qualquer elemento
§ A inserção é sempre feita depois do elemento En
§ A retirada é sempre feita no elemento E1

                                                              5
Tipos de filas

      § Neste estágio, estaremos trabalhando com três
        tipos de filas: seqüenciais, encadeadas e circulares
           Œ Seqüencial: neste TAD, os elementos da fila são
            armazenados em endereços seqüenciais. Materializada
            na forma de um vetor (arranjo ou matriz).
                                                                  v[ ]
                        Fila Vazia   ?   ?   ?   ...   ?    Frente= 0 e Fim= -1

• É preciso controlar
• É preciso controlar   Insere A     A   ?   ?   ...   ?    Frente= 0 e Fim= 0
o início e o final da
o início e o final da
fila. Note os campos
fila. Note os campos
frente e fim.
frente e fim.
                        Insere B     A   B   ?   ...   ?    Frente= 0 e Fim= 1

• Como poderíamos
• Como poderíamos       Insere C     A   B   C   ...   ?    Frente= 0 e Fim= 2
adaptar uma lista
adaptar uma lista
seqüencial à uma
seqüencial à uma
fila?
fila?
                        Retira       ?   B   C   ...   ?    Frente= 1 e Fim= 2
                                                                                  6
Tipos de filas

§ (Continuação.)
  • Encadeada: neste TAD, os elementos da fila são
   elementos encadeados por ponteiros

      TFilaEnc f*          12             09


  Ž Circular: caso particular de filas. Iremos levantar e
   comentar a necessidade da implementação circular
   mais à frente
§ Importante: são apenas diferentes maneiras de se
  implementar o TAD, porém todas as três formas
  seguem a mesma filosofia First In First Out               7
Filas seqüenciais

                Pense um pouco...
§ O que você acha que seria necessário para
  implementar uma biblioteca de um novo TAD que
  representasse uma fila seqüencial?
  Œ um vetor de elementos (tamanho pré-definido)
  • duas variáveis que controlem a frente e o fim da fila
                           /* filaseq.h */
                           /* filaseq.h */
  /* estruturação */       void criarFila(TFila *fila);
                           void criarFila(TFila *fila);
  typedef struct fila {
                           int filaVazia(TFila *fila);
                           int filaVazia(TFila *fila);
    int elementos[MAX];
        elementos[MAX];
                           int filaCheia(TFila *fila);
                           int filaCheia(TFila *fila);
    int frente;
    int fim;               int enfileirar(TFila *fila, int dado);
                           int enfileirar(TFila *fila, int dado);
  }TFila;                  int desenfileirar(TFila *fila, int *d);
                           int desenfileirar(TFila *fila, int *d);
                           void imprimir(TFila *fila);
                           void imprimir(TFila *fila);               8
Mas... há problemas!

§ Você deve ter percebido que a parte ocupada do
  vetor pode chegar à ultima posição
  § Ou seja, a fila seqüencial vai se deslocando da
    esquerda (frente) para à direita (fim) em cada retirada
       Fila        ?   C   D   ?   ?    Frente= 1 e Fim= 2

    Insere E e F   ?   C   D   E   F    Frente= 1 e Fim= 4

       Retira C    ?   ?   D   E   F    Frente= 2 e Fim= 4

       Insere G    ?   ?   D   E   F    Frente= 2 e Fim= 4

  § Existem dois elementos vazios na fila, mas nenhum
    outro elemento pode mais ser inserido!
       § fila.fim chegou à condição de limite (MAX -1)
                                                              9
Mas... há problemas!

§ E agora?
  § Do jeito que está, pode-se chegar a uma situação
    (absurda) em que a fila estará vazia, mas nenhum
    elemento novo poderá mais ser inserido!
  § Conclusão: a representação seqüencial, descrita
    anteriormente, parece não ser muito boa!
§ Poderíamos mudar a função desenfileirar(…)
  § E fazer o deslocamento à esquerda de todos os
    elementos a cada retirada na frente da fila, mas...
     § ...e se a fila tivesse 100 elementos?
  § Havíamos criticado o deslocamento da lista seqüencial!
                                                          10
Solução

§ O que se quer é reaproveitar as primeiras posições
  livres do vetor sem implementar um re-arranjo
  (trabalhoso) de todos os elementos a cada retirada
   § Para isso, pode-se incrementar as posições do vetor de
     maneira “circular”
   § Ou seja, se o último elemento da fila ocupar a última
     posição do vetor, inserimos os novos elementos a partir
     do início do vetor!
§ Graficamente:
        Insere G   G     D    E   F    Frente= 2 e Fim= 0

                                                            11
Filas encadeadas

§ O que fazer quando o número máximo de elementos
  na fila não é conhecido?
   § Devemos implementar a fila usando uma estrutura de
     dados dinâmica (com alocação dinâmica)
                                   dinâmica
   § Podemos empregar os conceitos vistos nas listas
     simplesmente (ou duplamente) encadeadas
§ Entretanto, as regras de inserção/remoção, agora,
  irão mudar!
   § Algumas funções da lista encadeada (inserir ou remover
     mediante uma posição qualquer, entre outras) deverão
     ser eliminadas neste novo TAD
                                                          12
Filas encadeadas - modus operandi

§ O primeiro elemento (início) da lista encadeada poderá
  representar a frente atual da fila
   § Assim, cada novo elemento será inserido no final da lista.
     Conseqüentemente e, sempre que solicitado, retiramos o
     elemento a partir do início da lista
§ Desta forma, vamos precisar de apenas duas funções
  auxiliares na lista:
   Πuma para inserir no fim (enfileirar)
   • outra para remover do início (desenfileirar)
§ Há apenas uma desvantagem:
   § Para cada elemento a ser inserido na fila, teremos que
     percorrer todos os nodos até encontrar o último.
                                                                  13
Fila encadeada com nó descritor

     § Vamos utilizar os conhecimentos auferidos em
       técnicas de encadeamento!
     § Neste caso em particular, iremos alocar um nó
       “cabeça” para que possamos ter acesso direto ao
       final da fila (promover performance)
    TFilaEncCab f        Cabeça

                          03
     Vantagens
     Vantagens
• Acesso direto ao
• Acesso direto ao
primeiro nodo;
primeiro nodo;
• Acesso direto ao
• Acesso direto ao       100       110        120
último nodo;
último nodo;
• Informação sobre o
• Informação sobre o
tamanho da lista.
tamanho da lista.                                        14
Algoritmos em C

§ O que deverá ser feito pelo aluno:
   § Escolha e instalação do ambiente a ser trabalhado no
     laboratório
   § Modelagem deste TAD (dados e operações)
   § Implementação dos algoritmos de operações básicas
     vistos em sala de aula na linguagem C
   § Utilização das regras de modelagem vistas no módulo
     anterior (criação de bibliotecas) e modularização
   § Implantação de código legível e bem documentado
   § Nomes de variáveis condizentes com o problema
   § Prática de laboratório
                                                            15
Para um bom aproveitamento:

§ O aluno deve identificar a relação entre TAD
  (biblioteca e modularização) com a implementação
  da fila no código!
§ Resolva todas as questões da prática de
  laboratório de filas circular e encadeada
§ Procure o professor ou monitor da disciplina e
  questione conceitos, listas, etc.
§ Não deixe para codificar tudo e acumular assunto
  para a primeira avaliação.
  § Este é apenas um dos assuntos abordados na prova!
                                                        16

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 
Geometriamar - Prof. Marcelo Lopes - 000 - Sistemas de Numeração
Geometriamar - Prof. Marcelo Lopes - 000 - Sistemas de NumeraçãoGeometriamar - Prof. Marcelo Lopes - 000 - Sistemas de Numeração
Geometriamar - Prof. Marcelo Lopes - 000 - Sistemas de Numeração
 
Pilha e Fila Estática
Pilha e Fila EstáticaPilha e Fila Estática
Pilha e Fila Estática
 
Aula 1 lpa
Aula 1   lpaAula 1   lpa
Aula 1 lpa
 
Aula 10
Aula 10 Aula 10
Aula 10
 
Aula01
Aula01Aula01
Aula01
 
Pilhas encadeadas
Pilhas encadeadasPilhas encadeadas
Pilhas encadeadas
 
Filas encadeadas
Filas encadeadasFilas encadeadas
Filas encadeadas
 
Estrutura de dados - Pilhas
Estrutura de dados - PilhasEstrutura de dados - Pilhas
Estrutura de dados - Pilhas
 
Programacao funcional
Programacao funcionalProgramacao funcional
Programacao funcional
 
Arrays em java
Arrays em javaArrays em java
Arrays em java
 
Arrays (vetores) em Java
Arrays (vetores) em JavaArrays (vetores) em Java
Arrays (vetores) em Java
 
Introdução ao paradigma funcional com scala
Introdução ao paradigma funcional com scalaIntrodução ao paradigma funcional com scala
Introdução ao paradigma funcional com scala
 
Livro Mini-Curso de Haskell
Livro Mini-Curso de HaskellLivro Mini-Curso de Haskell
Livro Mini-Curso de Haskell
 
Semana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetoresSemana10-ordenacao-pesquisa-vetores
Semana10-ordenacao-pesquisa-vetores
 
Apostila estrutura de dados 2
Apostila estrutura de dados 2Apostila estrutura de dados 2
Apostila estrutura de dados 2
 
Introdução Programação Funcional
Introdução Programação FuncionalIntrodução Programação Funcional
Introdução Programação Funcional
 
Estrutura de dados em Java - Pilhas
Estrutura de dados em Java - PilhasEstrutura de dados em Java - Pilhas
Estrutura de dados em Java - Pilhas
 
Ordenação de vetores
Ordenação de vetoresOrdenação de vetores
Ordenação de vetores
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcional
 

Destaque

Aula01 - estrutura de dados
Aula01 - estrutura de dadosAula01 - estrutura de dados
Aula01 - estrutura de dadosAbner Lima
 
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áticasLeinylson Fontinele
 
Estrutura de Dados Aula 07 - Alocação dinâmica de memória
Estrutura de Dados Aula 07 - Alocação dinâmica de memóriaEstrutura de Dados Aula 07 - Alocação dinâmica de memória
Estrutura de Dados Aula 07 - Alocação dinâmica de memóriaLeinylson Fontinele
 

Destaque (9)

Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Aula02 Pilhas
Aula02   PilhasAula02   Pilhas
Aula02 Pilhas
 
Aula03 Filas
Aula03   FilasAula03   Filas
Aula03 Filas
 
Ed1
Ed1Ed1
Ed1
 
Aula01 - estrutura de dados
Aula01 - estrutura de dadosAula01 - estrutura de dados
Aula01 - estrutura de dados
 
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
 
Estrutura de Dados Aula 07 - Alocação dinâmica de memória
Estrutura de Dados Aula 07 - Alocação dinâmica de memóriaEstrutura de Dados Aula 07 - Alocação dinâmica de memória
Estrutura de Dados Aula 07 - Alocação dinâmica de memória
 
Estruturas de dados
Estruturas de dadosEstruturas de dados
Estruturas de dados
 

Semelhante a Pged 06

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-oopJean Martina
 
Pilhas e Filas.ppt
Pilhas e Filas.pptPilhas e Filas.ppt
Pilhas e Filas.pptJoberthSilva
 
Aula_05_-_Listas_Duplamente_Encadeadas_opp.ppt
Aula_05_-_Listas_Duplamente_Encadeadas_opp.pptAula_05_-_Listas_Duplamente_Encadeadas_opp.ppt
Aula_05_-_Listas_Duplamente_Encadeadas_opp.pptssuserd654cb1
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dadosgjpbg
 
Aula_05_-_Listas_Duplamente_Encadeadas.ppt
Aula_05_-_Listas_Duplamente_Encadeadas.pptAula_05_-_Listas_Duplamente_Encadeadas.ppt
Aula_05_-_Listas_Duplamente_Encadeadas.pptssuserd654cb1
 
Maratona de Programação com STL
Maratona de Programação com STLMaratona de Programação com STL
Maratona de Programação com STLMarcos Castro
 
Aula_01_-_Pilhas_e_Filas_com_Vetores.ppt
Aula_01_-_Pilhas_e_Filas_com_Vetores.pptAula_01_-_Pilhas_e_Filas_com_Vetores.ppt
Aula_01_-_Pilhas_e_Filas_com_Vetores.pptssuserd654cb1
 
Estrutura de Dados - Aula 09 - Listas Simplesmente Encadeadas
Estrutura de Dados - Aula 09 - Listas Simplesmente EncadeadasEstrutura de Dados - Aula 09 - Listas Simplesmente Encadeadas
Estrutura de Dados - Aula 09 - Listas Simplesmente EncadeadasLeinylson Fontinele
 
6 alocacao sequencial - pilhas
6   alocacao sequencial - pilhas6   alocacao sequencial - pilhas
6 alocacao sequencial - pilhasRicardo Bolanho
 
Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STLMarcos Castro
 
Exercício de estrutura de dados 01
Exercício de estrutura de dados 01Exercício de estrutura de dados 01
Exercício de estrutura de dados 01Patricia Diniz
 
SciLab -Tutorial
SciLab -TutorialSciLab -Tutorial
SciLab -Tutorialblogmaxima
 

Semelhante a Pged 06 (20)

Pged 05
Pged 05Pged 05
Pged 05
 
Pged 04
Pged 04Pged 04
Pged 04
 
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
 
Pilhas e Filas.ppt
Pilhas e Filas.pptPilhas e Filas.ppt
Pilhas e Filas.ppt
 
Top0
Top0Top0
Top0
 
Top0
Top0Top0
Top0
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Aula_05_-_Listas_Duplamente_Encadeadas_opp.ppt
Aula_05_-_Listas_Duplamente_Encadeadas_opp.pptAula_05_-_Listas_Duplamente_Encadeadas_opp.ppt
Aula_05_-_Listas_Duplamente_Encadeadas_opp.ppt
 
Pged 03
Pged 03Pged 03
Pged 03
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Aula_05_-_Listas_Duplamente_Encadeadas.ppt
Aula_05_-_Listas_Duplamente_Encadeadas.pptAula_05_-_Listas_Duplamente_Encadeadas.ppt
Aula_05_-_Listas_Duplamente_Encadeadas.ppt
 
Maratona de Programação com STL
Maratona de Programação com STLMaratona de Programação com STL
Maratona de Programação com STL
 
Lpiii dp-apostila
Lpiii dp-apostilaLpiii dp-apostila
Lpiii dp-apostila
 
Aula_01_-_Pilhas_e_Filas_com_Vetores.ppt
Aula_01_-_Pilhas_e_Filas_com_Vetores.pptAula_01_-_Pilhas_e_Filas_com_Vetores.ppt
Aula_01_-_Pilhas_e_Filas_com_Vetores.ppt
 
Estrutura de Dados - Aula 09 - Listas Simplesmente Encadeadas
Estrutura de Dados - Aula 09 - Listas Simplesmente EncadeadasEstrutura de Dados - Aula 09 - Listas Simplesmente Encadeadas
Estrutura de Dados - Aula 09 - Listas Simplesmente Encadeadas
 
6 alocacao sequencial - pilhas
6   alocacao sequencial - pilhas6   alocacao sequencial - pilhas
6 alocacao sequencial - pilhas
 
Estruturas de dados com C++ e STL
Estruturas de dados com C++ e STLEstruturas de dados com C++ e STL
Estruturas de dados com C++ e STL
 
Exercício de estrutura de dados 01
Exercício de estrutura de dados 01Exercício de estrutura de dados 01
Exercício de estrutura de dados 01
 
SciLab -Tutorial
SciLab -TutorialSciLab -Tutorial
SciLab -Tutorial
 
Fila de prioridades
Fila de prioridadesFila de prioridades
Fila de prioridades
 

Mais de samuelthiago

Interface grafica em_java_parte_v
Interface grafica em_java_parte_vInterface grafica em_java_parte_v
Interface grafica em_java_parte_vsamuelthiago
 
Interface grafica em_java_parte_iv
Interface grafica em_java_parte_ivInterface grafica em_java_parte_iv
Interface grafica em_java_parte_ivsamuelthiago
 
Interface grafica em_java_parte_iii
Interface grafica em_java_parte_iiiInterface grafica em_java_parte_iii
Interface grafica em_java_parte_iiisamuelthiago
 
Interface grafica em_java_parte_ii
Interface grafica em_java_parte_iiInterface grafica em_java_parte_ii
Interface grafica em_java_parte_iisamuelthiago
 
Interface grafica em_java_parte_i
Interface grafica em_java_parte_iInterface grafica em_java_parte_i
Interface grafica em_java_parte_isamuelthiago
 
Poo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_iiPoo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_iisamuelthiago
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_jsamuelthiago
 
Projeto calculadora em_java
Projeto calculadora em_javaProjeto calculadora em_java
Projeto calculadora em_javasamuelthiago
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_jsamuelthiago
 
01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)samuelthiago
 

Mais de samuelthiago (20)

Eclipse i (1)
Eclipse i (1)Eclipse i (1)
Eclipse i (1)
 
Html básico
Html básicoHtml básico
Html básico
 
Interface grafica em_java_parte_v
Interface grafica em_java_parte_vInterface grafica em_java_parte_v
Interface grafica em_java_parte_v
 
Interface grafica em_java_parte_iv
Interface grafica em_java_parte_ivInterface grafica em_java_parte_iv
Interface grafica em_java_parte_iv
 
Interface grafica em_java_parte_iii
Interface grafica em_java_parte_iiiInterface grafica em_java_parte_iii
Interface grafica em_java_parte_iii
 
Interface grafica em_java_parte_ii
Interface grafica em_java_parte_iiInterface grafica em_java_parte_ii
Interface grafica em_java_parte_ii
 
Interface grafica em_java_parte_i
Interface grafica em_java_parte_iInterface grafica em_java_parte_i
Interface grafica em_java_parte_i
 
Poo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_iiPoo interacao entre_objetos_blue_j_ii
Poo interacao entre_objetos_blue_j_ii
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_j
 
Projeto calculadora em_java
Projeto calculadora em_javaProjeto calculadora em_java
Projeto calculadora em_java
 
Introducao a poo_com_blue_j
Introducao a poo_com_blue_jIntroducao a poo_com_blue_j
Introducao a poo_com_blue_j
 
01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)01 02 introdução aos bancos de dados (slides)
01 02 introdução aos bancos de dados (slides)
 
Java 08
Java 08Java 08
Java 08
 
Java 07
Java 07Java 07
Java 07
 
Java 06
Java 06Java 06
Java 06
 
Java 05
Java 05Java 05
Java 05
 
Java 04
Java 04Java 04
Java 04
 
Java 03
Java 03Java 03
Java 03
 
Java 02
Java 02Java 02
Java 02
 
Java 01
Java 01Java 01
Java 01
 

Pged 06

  • 1. Curso Superior de Tecnologia em Telemática Programação e Estruturas de Dados Filas – Fundamentos e Implementações Copyright©2010 Prof. César Rocha cesarocha@ifpb.edu.br 1
  • 2. Objetivos § Explorar os conceitos fundamentais acerca do uso de filas utilizando a linguagem C § Organização e implementação, características, vantagens, desvantagens, regras de utilização, operações básicas e algoritmos de implementação § Neste módulo, serão abordadas ainda as seguintes implementações de filas: seqüencial, encadeada e circular § Este módulo será utilizado como referência na entrega dos futuros projetos § Implementação das estruturas e algoritmos, criação das bibliotecas e práticas de laboratório 2
  • 3. Motivação § Uma das estruturas de dados mais utilizadas em programação é a fila § Um exemplo de utilização em computação é a implementação de uma fila de impressão § Assim como na pilha, os acessos aos elementos em uma fila também seguem uma regra : § Lembre-se da pilha, onde: Last In First Out § Porém, uma fila é: First In First Out § A idéia fundamental § Só podemos inserir um novo nó no final da fila § Só podemos retirar a partir do início da fila 3
  • 4. Estratégia § Pode-se fazer uma analogia com uma fila de clientes em um banco qualquer: § o primeiro a entrar na fila, será o primeiro a sair e ser atendido (retiramos ele do início ou frente da fila) § o último cliente deve entrar no final da fila e, portanto, será o último a sair (ou ser atendido) na fila § Portanto: § Não podemos retirar qualquer cliente da fila! § Apenas clientes que estão na frente da fila § Não podemos inserir um cliente na fila de tal forma que ele não seja o último no conjunto de clientes 4
  • 5. Propriedades § Propriedades de uma fila: § Existem n elementos enfileirados; § E1 é o elemento no início (ou frente) da fila; § En é o último elemento da fila; § A inserção de um primeiro elemento E1 em uma fila vazia, torna-o o primeiro a sair da estrutura § Não se pode consultar qualquer elemento § A inserção é sempre feita depois do elemento En § A retirada é sempre feita no elemento E1 5
  • 6. Tipos de filas § Neste estágio, estaremos trabalhando com três tipos de filas: seqüenciais, encadeadas e circulares Œ Seqüencial: neste TAD, os elementos da fila são armazenados em endereços seqüenciais. Materializada na forma de um vetor (arranjo ou matriz). v[ ] Fila Vazia ? ? ? ... ? Frente= 0 e Fim= -1 • É preciso controlar • É preciso controlar Insere A A ? ? ... ? Frente= 0 e Fim= 0 o início e o final da o início e o final da fila. Note os campos fila. Note os campos frente e fim. frente e fim. Insere B A B ? ... ? Frente= 0 e Fim= 1 • Como poderíamos • Como poderíamos Insere C A B C ... ? Frente= 0 e Fim= 2 adaptar uma lista adaptar uma lista seqüencial à uma seqüencial à uma fila? fila? Retira ? B C ... ? Frente= 1 e Fim= 2 6
  • 7. Tipos de filas § (Continuação.) • Encadeada: neste TAD, os elementos da fila são elementos encadeados por ponteiros TFilaEnc f* 12 09 Ž Circular: caso particular de filas. Iremos levantar e comentar a necessidade da implementação circular mais à frente § Importante: são apenas diferentes maneiras de se implementar o TAD, porém todas as três formas seguem a mesma filosofia First In First Out 7
  • 8. Filas seqüenciais Pense um pouco... § O que você acha que seria necessário para implementar uma biblioteca de um novo TAD que representasse uma fila seqüencial? Œ um vetor de elementos (tamanho pré-definido) • duas variáveis que controlem a frente e o fim da fila /* filaseq.h */ /* filaseq.h */ /* estruturação */ void criarFila(TFila *fila); void criarFila(TFila *fila); typedef struct fila { int filaVazia(TFila *fila); int filaVazia(TFila *fila); int elementos[MAX]; elementos[MAX]; int filaCheia(TFila *fila); int filaCheia(TFila *fila); int frente; int fim; int enfileirar(TFila *fila, int dado); int enfileirar(TFila *fila, int dado); }TFila; int desenfileirar(TFila *fila, int *d); int desenfileirar(TFila *fila, int *d); void imprimir(TFila *fila); void imprimir(TFila *fila); 8
  • 9. Mas... há problemas! § Você deve ter percebido que a parte ocupada do vetor pode chegar à ultima posição § Ou seja, a fila seqüencial vai se deslocando da esquerda (frente) para à direita (fim) em cada retirada Fila ? C D ? ? Frente= 1 e Fim= 2 Insere E e F ? C D E F Frente= 1 e Fim= 4 Retira C ? ? D E F Frente= 2 e Fim= 4 Insere G ? ? D E F Frente= 2 e Fim= 4 § Existem dois elementos vazios na fila, mas nenhum outro elemento pode mais ser inserido! § fila.fim chegou à condição de limite (MAX -1) 9
  • 10. Mas... há problemas! § E agora? § Do jeito que está, pode-se chegar a uma situação (absurda) em que a fila estará vazia, mas nenhum elemento novo poderá mais ser inserido! § Conclusão: a representação seqüencial, descrita anteriormente, parece não ser muito boa! § Poderíamos mudar a função desenfileirar(…) § E fazer o deslocamento à esquerda de todos os elementos a cada retirada na frente da fila, mas... § ...e se a fila tivesse 100 elementos? § Havíamos criticado o deslocamento da lista seqüencial! 10
  • 11. Solução § O que se quer é reaproveitar as primeiras posições livres do vetor sem implementar um re-arranjo (trabalhoso) de todos os elementos a cada retirada § Para isso, pode-se incrementar as posições do vetor de maneira “circular” § Ou seja, se o último elemento da fila ocupar a última posição do vetor, inserimos os novos elementos a partir do início do vetor! § Graficamente: Insere G G D E F Frente= 2 e Fim= 0 11
  • 12. Filas encadeadas § O que fazer quando o número máximo de elementos na fila não é conhecido? § Devemos implementar a fila usando uma estrutura de dados dinâmica (com alocação dinâmica) dinâmica § Podemos empregar os conceitos vistos nas listas simplesmente (ou duplamente) encadeadas § Entretanto, as regras de inserção/remoção, agora, irão mudar! § Algumas funções da lista encadeada (inserir ou remover mediante uma posição qualquer, entre outras) deverão ser eliminadas neste novo TAD 12
  • 13. Filas encadeadas - modus operandi § O primeiro elemento (início) da lista encadeada poderá representar a frente atual da fila § Assim, cada novo elemento será inserido no final da lista. Conseqüentemente e, sempre que solicitado, retiramos o elemento a partir do início da lista § Desta forma, vamos precisar de apenas duas funções auxiliares na lista: Œ uma para inserir no fim (enfileirar) • outra para remover do início (desenfileirar) § Há apenas uma desvantagem: § Para cada elemento a ser inserido na fila, teremos que percorrer todos os nodos até encontrar o último. 13
  • 14. Fila encadeada com nó descritor § Vamos utilizar os conhecimentos auferidos em técnicas de encadeamento! § Neste caso em particular, iremos alocar um nó “cabeça” para que possamos ter acesso direto ao final da fila (promover performance) TFilaEncCab f Cabeça 03 Vantagens Vantagens • Acesso direto ao • Acesso direto ao primeiro nodo; primeiro nodo; • Acesso direto ao • Acesso direto ao 100 110 120 último nodo; último nodo; • Informação sobre o • Informação sobre o tamanho da lista. tamanho da lista. 14
  • 15. Algoritmos em C § O que deverá ser feito pelo aluno: § Escolha e instalação do ambiente a ser trabalhado no laboratório § Modelagem deste TAD (dados e operações) § Implementação dos algoritmos de operações básicas vistos em sala de aula na linguagem C § Utilização das regras de modelagem vistas no módulo anterior (criação de bibliotecas) e modularização § Implantação de código legível e bem documentado § Nomes de variáveis condizentes com o problema § Prática de laboratório 15
  • 16. Para um bom aproveitamento: § O aluno deve identificar a relação entre TAD (biblioteca e modularização) com a implementação da fila no código! § Resolva todas as questões da prática de laboratório de filas circular e encadeada § Procure o professor ou monitor da disciplina e questione conceitos, listas, etc. § Não deixe para codificar tudo e acumular assunto para a primeira avaliação. § Este é apenas um dos assuntos abordados na prova! 16