Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


pged 06, Notas de aula de Engenharia Telemática

Aula de estrutura de dados Filas Sequencial Circular e Fila encadeada com descritor

Tipologia: Notas de aula

Antes de 2010

Compartilhado em 24/11/2010

samuel-santos-22
samuel-santos-22 🇧🇷

4.6

(41)

262 documentos

1 / 16

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
1
CursoSuperior de Tecnologia emTelemática
Programação e Estruturas de Dados
FilasFundamentose Implementações
Copyright©2010
Prof. CésarRocha
cesarocha@ifpb.edu.br
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff

Pré-visualização parcial do texto

Baixe pged 06 e outras Notas de aula em PDF para Engenharia Telemática, somente na Docsity!

1

Curso Superior de Tecnologia em Telemática Programação e Estruturas de Dados

Filas – Fundamentos e Implementações

Copyright© Prof. César Rocha [email protected]

Objetivos

ß Explorar os conceitos fundamentais acerca do uso

de filasfilas 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, encadeadaseqüencial, encadeada

e circulare circular

ß Este módulo será utilizado como referência na

entrega dos futuros projetos

ß Implementação das estruturas e algoritmos, criação das bibliotecasbibliotecas e práticas de laboratório

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

Propriedades

ß Propriedades de uma fila:

ß Existem nn elementos enfileirados; ß ß E1E1 é o elemento no início (ou frente) da fila; ß ß EnEn é o último elemento da fila;

ß A inserção de um primeiro elemento E1E1 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 EnEn

ß A retirada é sempre feita no elemento E1E

ß (Continuação.)

ç Encadeada: neste TAD, os elementos da fila são elementos encadeados por ponteirosponteiros

é Circular: caso particular de filas. Iremos levantar e comentar a necessidade da implementação circular mais à frente

ß ß Importante:Importante: são apenas diferentes maneiras de se

implementar o TAD, porém todas as três formas

seguem a mesma filosofia FF irst II n FF irst OO ut

Tipos de filas

TFilaEnc f* (^12 )

8

Filas seqüenciais

Pense um pouco... 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 /_ **void criarFila(TFila *fila); int filaVazia(TFila *fila); int filaCheia(TFila *fila); int enfileirar(TFila *fila, int dado); int desenfileirar(TFila *fila, int d); void imprimir(TFila fila);

_/ filaseq.h /_ **void criarFila(TFila *fila); int filaVazia(TFila *fila); int filaCheia(TFila *fila); int enfileirar(TFila *fila, int dado); int desenfileirar(TFila *fila, int d); void imprimir(TFila fila);

_/ estruturação /_ typedef struct fila { int elementos[MAX]; int frente; int fim; }TFila;

_/ estruturação /_ typedef struct fila { int elementos[MAX]; int frente; int fim; }TFila;

Mas... há problemas! Mas... há problemas!

ß ß E agora?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!

Solução 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:Graficamente:

Insere G (^) G D E F Frente= 2 e Fim= 0

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.

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)

100 110 120

TFilaEncCab f 03 Vantagens

  • Acesso direto ao primeiro nodo;
  • Acesso direto ao último nodo;
  • Informação sobre o tamanho da lista.

VantagensVantagens

  • AcessoAcesso diretodireto aoao primeiro nodoprimeironodo;;
  • AcessoAcesso diretodireto aoao último nodoúltimonodo;;
  • • (^) InformaçãoInformação sobresobre oo tamanho datamanhoda listalista..

Cabeça

Para um bom aproveitamento: 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áprática detica de

laboratólaboratório de filas circular e encadeadario 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!