Filas: conceitos e implementações



Documentos relacionados
Algoritmos e Estrutura de Dados. Prof. Tiago A. E. Ferreira

EAD Fila. - algumas operações realizam-se na frente/cabeça e outras na cauda da Fila

Lista restrita onde as operações de inserção e retirada são feitas nas extremidades. Deque (fila de final duplo).

Filas. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

PROGRAMAÇÃO II 3. FILA DINÂMICA

CES-11. Algoritmos e Estruturas de Dados. Carlos Alberto Alonso Sanches Juliana de Melo Bezerra

Estrutura de Dados Básica

Listas (Parte 2) Túlio Toffolo BCC202 Aula 10 Algoritmos e Estruturas de Dados I

Métodos Computacionais. Fila

AULA 16 - Sistema de Arquivos

Trabalho 3: Agenda de Tarefas

Gerenciamento de memória

7. ESTRUTURAS DE DADOS ESTÁTICAS E DINÂMICAS

Tipos de Dado Abstrato: Listas, Filas e Pilhas

Fila de Prioridade. Siang Wun Song - Universidade de São Paulo - IME/USP. MAC Estruturas de Dados

Prof. Marcelo Nogueira

Estruturas de Dados Pilhas, Filas e Deques

2ª Lista de Exercícios

Programas operam sobre dados. Dados são relacionados e possuem estrutura. Como representar e manipular dados em um computador

COS767 - Modelagem e Análise Aula 2 - Simulação. Algoritmo para simular uma fila Medidas de interesse

Capítulo 4 Gerenciamento de Memória

Tópicos Avançados em Estrutura de Dados 6º Período Ciência da Computação Prof. Jean Carlos Hennrichs. Revisão. 2. Lista Estática Duplamente Encadeada

Memória - Gerenciamento. Sistemas Operacionais - Professor Machado

O que é um algoritmo? O que é um programa? Algoritmos. Programas. Aula 1 Tipo Abstrato de Dados

Filas. A ordem de saída corresponde diretamente à ordem de entrada dos elementos. Fila de caixa bancário

Aula 3 Alocação Dinâmica

3.4 Representação física: alocação encadeada (dinâmica) Ptlista - variável ponteiro externa que indica o início da lista.

Linguagem e Técnicas de Programação I Tipos de dados, variáveis e constantes. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.

Estruturas de Dados Aula 15: Árvores 17/05/2011

Implementando uma Classe e Criando Objetos a partir dela

- UNIVERSIDADE DO VALE DO RIO DOS SINOS CIÊNCIAS EXATAS E TECNOLÓGICAS Curso: Informática / Ciência da Computação

DAS5102 Fundamentos da Estrutura da Informação

Este trabalho tem como objetivo praticar o uso de tipos abstratos de dados e estruturas do tipo Lista.

FACULDADE DE TECNOLOGIA SENAC GOIÁS ADELTON HENRIQUE ABISHAI LEMES BORGES NETO HENRIQUE FERREIRA DA SILVA

BUSCA EM LISTAS LISTAS SEQÜENCIAIS, LISTAS SIMPLESMENTE E DUPLAMENTE ENCADEADAS E LISTAS CIRCULARES

DAS5102 Fundamentos da Estrutura da Informação

UNIP - Ciência da Computação e Sistemas de Informação. Estrutura de Dados. AULA 6 Filas

Capítulo 4 Gerenciamento de Memória

/*(Atenção: Em se tratando de uma lista estaticamente alocada, temos utilizado a estratégia de passa o tamanho máximo do vetor.)*/

Complexidade de Algoritmos

Hashing (Tabela de Dispersão)

Filas. Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes

Organização de Computadores 1

FACULDADE CAMPO LIMPO PAULISTA MESTRADO EM CIÊNCIA DA COMPUTAÇÃO. Projeto e Análise de Algoritmos II Lista de Exercícios 2

Introdução à Programação. Armazenamento de Grande Quantidade de Informação Usando Vetores

Estrutura de Dados Básica

Tipo Abstrato de Dados

Pilhas. Fabrício J. Barth. BandTec - Faculdade de Tecnologia Bandeirantes

SOP - TADS Sistemas de Arquivos Cap 4 Tanenmbaum

INF 1010 Estruturas de Dados Avançadas

Figure 2 - Nós folhas de uma árvore binária representando caracteres ASCII

EAD Árvore árvore binária

Algoritmos e Estrutura de Dados II

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO

A Pilha. Aula 02. DPEE 1038 Estrutura de Dados para Automação Curso de Engenharia de Controle e Automação Universidade Federal de Santa Maria

Computação II Orientação a Objetos

7 - Análise de redes Pesquisa Operacional CAPÍTULO 7 ANÁLISE DE REDES. 4 c. Figura Exemplo de um grafo linear.

Algoritmos e Estruturas de Dados I

Trabalho Prático 1 Revisão de Programação, Tipos Abstratos de Dados e Combinação de Alocação Estática e Dinâmica de Memória

Programação em papel quadriculado

Listas Duplamente Encadeadas

Sistemas de Arquivos. André Luiz da Costa Carvalho

-Estrutura linear de acesso seqüencial que ordena seus elementos pela seqüência cronológica de sua entrada;

Nível da Arquitetura do Conjunto das Instruções

Introdução. Uso do disco Vantagens Desvantagens Baixo custo, facilidade de manutenção do software e do hardware, simetria e flexibilidade

Algoritmos e Programação Parte Teórica

Gerência do Sistema de Arquivos. Adão de Melo Neto

Exercícios Teóricos Resolvidos

compreender a importância de cada estrutura de controle disponível na Linguagem C;

PMBoK Comentários das Provas TRE-PR 2009

Busca em Memória. Secundária

Prof. Bruno Calegaro

Avaliação de Desempenho

Algoritmos e Estrutura de Dados. Aula 05 Estrutura de Dados: Listas Prof. Tiago A. E. Ferreira

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15

Prof. Yandre Maldonado - 1 PONTEIROS. Prof. Yandre Maldonado e Gomes da Costa

5 - Vetores e Matrizes Linguagem C CAPÍTULO 5 VETORES E MATRIZES

Arquitetura de Sistemas Operacionais

Estruturas de Dados I

Estruturas de Dados com Jogos. Capítulo 1 Tipos Abstratos de Dados

Curso de C. Memória Dinâmica 17/05/ :33 1

Estruturas de Dados. Parte dos slides a seguir são adaptações, extensões e traduções para C dos originais:

Sistemas Operacionais

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 4

MODELAGEM VISUAL DE OBJETOS COM UML DIAGRAMA DE CLASSES.

Tópicos Avançados em Banco de Dados Gerenciamento de Transações em Banco de Dados. Prof. Hugo Souza

IFTO LÓGICA DE PROGRAMAÇÃO AULA 05

Solução de problemas por meio de busca (com Python) Luis Martí DEE/PUC-Rio

Figura 1: tela inicial do BlueControl COMO COLOCAR A SALA DE INFORMÁTICA EM FUNCIONAMENTO?

A memória é um recurso fundamental e de extrema importância para a operação de qualquer Sistema Computacional; A memória trata-se de uma grande

O mecanismo de alocação da CPU para execução de processos constitui a base dos sistemas operacionais multiprogramados.

Unidade 8: Padrão MVC e DAO Prof. Daniel Caetano

Transcrição:

Estrutura de Dados I Filas: conceitos e implementações Cesar Rocha cesar@pontoweb.com.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, 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 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 enciais, encadeadas 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). Fila Vazia... v[ ] Frente= 0 e Fim= -1 Épreciso controlar o início e o final da fila. Note os campos frente e fim. Como poderíamos adaptar uma lista seqüencial encial à uma fila Insere A Insere B Insere C A... A B... A B C... B C... Frente= 0 e Fim= 0 Frente= 0 e Fim= 1 Frente= 0 e Fim= 2 Retira Frente= 1 e Fim= 2 6

(Continuação.) Tipos de filas ❷ 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 /* estruturação */ typedef struct fila { int elementos[max]; int frente; int fim; }TFila; /* 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); 8

Mas... há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 ef C D E F Frente= 1 e Fim= 4 Retira C D E F Frente= 2 e Fim= 4 Insere G D E 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) F 9

Mas... há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 mudara 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: G D E Insere G Frente= 2 e Fim= 1 F 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) 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 cabeça Vamos utilizar os conhecimentos auferidos em técnicas especiais 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 Vantagens Acesso direto ao primeiro nodo; Acesso direto ao último nodo; Informação sobre o tamanho da lista. 03 100 110 120 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 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