ESTRUTURAS DO TIPO FILA

Slides:



Advertisements
Apresentações semelhantes
RECORTE DE FIGURAS Algoritmo proposto para Recorte de Segmentos (atribuído a Ivan Sutherland e Dan Cohen) Para o entendimento do algoritmo a ser proposto,
Advertisements

LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
ESTRUTURA DE DADOS Professor: Marcelo Mendes Turma: MBI-1
Aula T10 – BCC202 Listas – Parte 2 Túlio Toffolo www. decom. ufop
Aula T-09 – BCC202 Listas (Parte 1) Túlio Toffolo www. decom. ufop
Índice Estrutura de Dados Pilhas 2010 Renan Robson Lima Carneiro
O TAD fila O TAD fila armazena objetos arbitrários
Pesquisa de Informação
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
Programação Avançada I
Algoritmos de manipulação de estruturas elementares de dados
Estrutura de Dados e Algoritmos e Programação e Computadores II
Universidade Federal do Pará Serviço Público Federal Centro de Ciências Exatas e Naturais Departamento de Informática Abril/2001.
Monitores.
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Estruturas de Dados I DECOM – UFOP
Filas David Menotti Estruturas de Dados I DECOM – UFOP.
Aula T11 – BCC202 Pilhas Túlio Toffolo
David Menotti Estruturas de Dados I DECOM – UFOP
Pilha David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP.
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Aula T12 – BCC202 Listas Túlio Toffolo
FILAS (Queues) Estrutura linear de acesso seqüencial que ordena seus elementos pela seqüência cronológica de sua entrada; Estrutura FIFO (First In First.
7 Abstração Genérica Unidades genéricas e instanciação.
Instrutor: Nilo Menezes
Robson Godoi / Sandra Siebra
O Portal do Estudante de Computação
GAUSS COM PIVOTEAMENTO
Prof. Hilton Cardoso Marins Junior
ALGORITMOS E ESTRUTURAS DE DADOS
Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C
Ponteiros em Pascal Variáveis ponteiros são aquelas que guardam o endereço de outra, possibilitando o acesso a seu conteúdo. Declaração em Pascal:  var.
Algoritmos e Estruturas de Dados
LISTAS DUPLAMENTE ENCADEADAS
Denise Guliato Faculdade de Computação – UFU
INTELIGÊNCIA ARTIFICIAL
Listas duplamente encadeadas Estrutura: tDado = integer; { ou real, char, etc.} tPtNo = ^tNo; tNo = record Ant: tPtNo Dado: tDado; Prox: tPtNo; end; var.
Filas - Definição Uma fila possui o comportamento: O primeiro que chega é o primeiro que sai. O único elemento que pode ser removido da fila é o primeiro.
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação
Estrutura de Dados Unidade 6 Simulação do exercício 6.2 Elaborada por Mauricio Falvo.
Denise Guliato Faculdade de Computação – UFU
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
Listas, Filas e Pilhas Katia Guimarães.
Aula 3 Listas, pilhas, filas.
Estruturas de Dados Aula 9: Listas (parte 1)
Ambiente de Execução - Rotinas
Capítulo III Modularização Procedimentos e Funções Universidade Federal de São Carlos Departamento de Computação Aluna: Luanna Lopes Lobato
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Estruturas de Dados Aula 11: TAD Pilha
Pilhas e Filas usando Alocação Estática e Dinâmica de Memória
© 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice Hall. Todos os direitos reservados.slide 1 © 2011 Pearson Prentice.
Filas  São utilizadas em aplicações onde são impostos critérios para a inserção e retirada de elementos cuja ordem não depende da ordem natural dos valores.
Vetores Bidimensionais – Debug - Ponteiros – Listas Encadeadas Simples
Semáforos n Variáveis compartilhadas são globais n Acesso a variáveis ocorre em procedimentos, mas podem estar espalhados pelo programa n Exige consulta.
Professor Ulisses Vasconcelos
Prof Ulisses Vasconcelos ESTRUTURA DE DADOS AULA 02 - PILHA Conceito Inserção Remoção.
Objetivos Ao concluir esta Disciplina espera-se que os alunos sejam capazes de: Distinguir os conceitos de Estrutura e Dados; Compreender o que são, como.
AULA 09 PROGRAMAÇÃO I. Estruturas de Dados Heterogêneas 10/08/2010 Programação I 2 Objetivo: Estudar os tipos de dados heterogêneos:  Registros;  Arrays.
Estrutura de Dados Aula 3 - Listas
Profa. Juliana Mafra ESTRUTURA DE DADOS 30 de Setembro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.
Computadores vs. Programas / Algoritmos Computadores vs. Programas -> Algoritmos O tratamento de problemas através do computador geralmente envolve uma.
Universidade Federal do Amazonas Instituto de Ciências Exatas e Tecnologia Prof. Lady Daiana de Oliveira Pinto Acadêmicos: Andrei Rodrigues Luciano Cavalcante.
USP – ICMC – SSC SSC0300 2º Semestre 2015 Disciplina de Linguagem de Programação e Aplicações [ Eng. Elétrica / Eletrônica ] 1 Prof. Dr. Daniel Rodrigo.
Pilha dinâmica Prof.° Jean Daniel Henri Merlin Andreazza
Estrutura de Dados Prof. André Cypriano M. Costa
UNIVERSIDADE FEDERAL DE MINAS GERAIS Pilhas e Filas Cristiano Arbex Valle Vinicius Fernandes dos Santos
Transcrição da apresentação:

ESTRUTURAS DO TIPO FILA

Filas Uma fila é também uma lista linear, mas para esta estrutura as inserções só podem ser efetuadas em um extremo da lista, e todas as retiradas (e geralmente os acessos) são realizados no outro extremo da lista. Política FIFO: first in first out Modelo real clássico: fila de pessoas esperando o atendimento em um banco: as pessoas do início da fila são atendidas antes e as que chegam depois, entram no fim da fila Ordem das filas: Ordem de chegada

Filas Filas são usadas tipicamente quando deseja-se processar itens de acordo com sua ordem de chegada (FIFO): Ex: filas do SO, simuladores, etc... As operações básicas definidas sobre um TAD Fila seriam semelhantes às operações definidas anteriormente para as pilhas e listas lineares

Operações definidas sobre o TAD Fila Inicia(Fila): faz a inicialização da fila Esvazia(Fila): Faz a fila ficar vazia Vazia(Fila): Função que retorna TRUE se a fila está vazia e FALSE do contrário; Enfileirar(x,Fila): Insere o elemento x no fim da Fila; Desenfileirar(Fila, x): Retorna elemento x no início da Fila, eliminando-o da mesma; Imprimir(Fila): imprime todos os elementos da fila

FILAS COM IMPLEMENTAÇÃO ATRAVÉS DE VETORES

Tipos de Representação Tradicional Em forma de Pilha x1 elementos ... x2 xn Frente = 1 Retaguarda MaxTam 2 x1 elementos Frente = 1 x2 ... xn Retaguarda MaxTam 2

Implementação da Estrutura da Fila const MaxTam = 100; InicioVetor = 1; type Ponteiro = integer; TipoItem = record Chave: TipoChave;     {outras declarações desejadas...}      end; TipoFila = record Item: array [1..MaxTam] of TipoItem;               Frente: Ponteiro; Retaguarda: Ponteiro;              end;

Operações sobre Filas usando Arranjo procedure Inicia(var Fila: TipoFila); begin Fila.Frente := InicioVetor; Fila.Retaguarda := Fila.Frente; end; procedure Esvazia(var Fila: TipoFila); function Vazia(var Fila: TipoFila): boolean; Vazia := Fila.Frente = Fila.Retaguarda;

Operações sobre Filas usando Arranjo procedure Imprimir (var Fila: TipoFila); var indice : Ponteiro; begin indice := Fila.Frente + 1; while indice <= Fila.Retaguarda do writeln(Fila.Item[indice].Chave); indice := indice +1; end end;

Implementação de Filas com Arranjos Procedimentos de Enfileirar e Desenfileirar: Quando um elemento é enfileirado, a parte final da fila é esticada... Quando um elemento é retirado da fila, a parte frontal da fila é contraída...

Operações sobre Filas usando Arranjo procedure Enfileira (x:TipoItem; var Fila:TipoFila); var indice : Ponteiro; begin if Fila.Retaguarda = MaxTam + 1 then writeln (‘Overflow’) else begin Fila.Item[Fila.Retaguarda] := x; Fila.Retaguarda := Fila.Retaguarda + 1; end; procedure Desenfileira (var Fila:TipoFila; x:TipoItem); if Vazia(Fila) then writeln (‘Fila Vazia’) x := Fila.Item[Fila.Frente]; Fila.Frente := Fila.Frente + 1;

Implementação de Filas com Arranjos Inserir os elementos 9, 6, 1, 10, 5, 8, e em seguida, exclui-los, na ordem informada 9 6 1 10 5 8 F R F R F R F R F R F R F R A fila está vazia mas não é mais possível inserir elementos

Problemas com Filas Na seqüência anterior, a fila chega ao limite final do espaço de memória Se tentarmos inserir um novo elemento, o TAD vai nos retornar um erro, dando a falsa impressão de que não existe mais espaço disponível... Solução: No algoritmo de inserção, após a atualização de Frente, verificar se a fila ficou vazia, i.e, Frente = Retaguarda; se este for o caso, reinicializar (Frente = Retaguarda := InicioVetor;) 3 4 9 6 1 10 5 8 F R

Problemas com Filas Mesmo assim ainda não resolve completamente o problema Em um vetor de 5 posições, as operações IIEIEIEIEI vai causar overflow, mesmo com a lista quase vazia F R Overflow!!! 9 6 1 10 5 8 7 Solução: Forçar Retaguarda a usar o espaço liberado por Começo, formando uma Fila Circular

Implementação de Filas com Arranjos Mesmo assim ainda não resolve completamente o problema No exemplo dado, realize as seguintes operações: I9, I6, E, I1, E, I10, E, I5, E, I8, E, I7 7 9 6 1 10 5 8 Overflow!!! F R F R F R F R F R F R R Solução: Forçar Retaguarda a usar o espaço liberado por Começo, formando uma Fila Circular

Filas Circulares Frente Mesma estrutura, inclusive com os ponteiros de controle frente e retaguarda Inicialmente também Frente = Retaguarda = InicioVetor Na fila circular, uma posição do vetor é utilizada para marcar o fim da fila no círculo: Perde-se uma posição, mas ganha-se em agilidade Mesmas operações utilizadas em fila comum, mas com alterações em Enfileira, e Desenfileira e Imprimir Retaguarda

Operações sobre Filas usando Arranjo procedure Enfileirar (x:TipoItem; var Fila:TipoFila); begin if Fila.Frente = (Fila.Retaguarda mod MaxTam ) + 1 then writeln(‘Overflow’) else begin Fila.Item[Fila.Retaguarda] := x; Fila.Retaguarda := (Fila.Retaguarda mod MaxTam ) + 1; end; procedure Desenfileirar (var Fila:TipoFila; var x:TipoItem); if Vazia(Fila) then writeln(‘Underflow’) x := Fila.Item[Fila.Frente]; Fila.Frente := (Fila.Frente mod MaxTam) + 1;

Operações sobre Filas usando Arranjo procedure Imprimir (var Fila: TipoFila); var indice : Ponteiro; begin indice := Fila.Frente; while indice <> Fila.Retaguarda do writeln(Fila.Item[indice].Chave); indice := (indice mod MaxTam)+1; end writeln(Fila.Item[Fila.Retaguarda].Chave); end;