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.

Slides:



Advertisements
Apresentações semelhantes
LISTAS Dilvan Moreira, parcialmente baseado em material do prof. Ricardo Campello.
Advertisements

O TAD fila O TAD fila armazena objetos arbitrários
Marco Antonio Montebello Júnior
Marco Antonio Montebello Júnior
Listas Lineares Estrutura que permite representar um conjunto de dados de forma a preservar a relação de ordem linear. Uma lista linear é composta de nós,
Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
Programação Avançada I
Listas encadeadas Prof. Rosana Palazon.
Programação II Estruturas de Dados
Programação II Estruturas de Dados
TADS – Tipos Abstratos de Dados
ESTRUTURAS DO TIPO FILA
Pesquisa em Memória Primária
Filas David Menotti Estruturas de Dados I DECOM – UFOP.
David Menotti 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
Pesquisa em Memória Primária
Aula T12 – BCC202 Listas Túlio Toffolo
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Estruturas de Dados e Algoritmos
AED – Algoritmos e Estruturas de Dados
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Listas Encadeadas.
Prof. Hilton Cardoso Marins Junior
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Prof. Hilton Cardoso Marins Junior LISTA LINEAR
Listas Lineares Estrutura de Dados.
Algoritmos e Estruturas de Dados
Aula prática 6 Vetores e Matrizes
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Denise Guliato Faculdade de Computação – UFU
Estruturas de Dados com Jogos
Estruturas de Dados com Jogos
INTELIGÊNCIA ARTIFICIAL
Tipos Abstratos de Dados
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.
Implementação de FILAS com Alocação Dinâmica
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
Estruturas de Dados com Jogos
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)
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
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática Disciplina: Estrutura de Dados Professor: Cheli dos S. Mendes da Costa Listas.
Filas. #define MAXFILA 100 typedef struct queue { int item [ MAXFILA]; int inic, fim; } fila; fila q;
© 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.
Lista Linear Base para outras estruturas
Professor Ulisses Vasconcelos
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
JAVA – Fila ATAI.
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.
Estrutura de Dados Aula 3 - Listas
Estrutura de dados Pilhas e filas
Profa. Juliana Mafra ESTRUTURA DE DADOS 30 de Setembro de 2009 Faculdade de Informática e Tecnologia de Pernambuco.
11 Pilhas, Filas e Listas Duplamente Encadeadas Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
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.
Estrutura de Dados Prof. André Cypriano M. Costa
UNIVERSIDADE FEDERAL DE MINAS GERAIS Pilhas e Filas Cristiano Arbex Valle Vinicius Fernandes dos Santos
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
INE5408 Estruturas de Dados Estruturas de Dados básicas utilizando Vetores - Introdução - Pilhas usando Vetores - Filas usando Vetores.
Transcrição da apresentação:

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 Out) a ordem de saída é a mesma ordem de entrada (o 1o a chegar será o 1o a sair da fila); Diferentemente da pilha uma fila pode ser manipulada pelas duas extremidades, conhecidas como inicio e fim (ou frente e cauda, etc); Restrições quanto à manipulação: inserções sempre no final, remoções sempre do início da fila;

FILA ESTÁTICA (SOBRE UM VETOR) C/ DESCRITOR 1) Sem compactação typedef struct { void **vetFila; int comprimentoDoVetor; int tamInfo; /* tamanho da informação */ int inicio; /*indexa o início da fila */ int fim; /*indexa o final da fila */ } Fila; Inserções incrementam o FIM, remoções incrementam o INICIO (INICIO e FIM variando); a) Inicialização: FIM = -1, INICIO = 0; b) Tamanho da Fila = FIM – INICIO + 1; c) Fila vazia : FIM < INICIO; d) Fila cheia (?!): FIM == ComprimentoDoVetor - 1;

2) Compactando a Fila — Movimentação de Dados A cada remoção move-se toda a fila na direção do seu inicio de forma a preencher o espaço deixado pela remoção: for (i=0; i < tamanhoFila; i++) memcpy(p->vetFila[i],p->vetFila[i+1],p->tamInfo); p->final -= p->inicio; p->inicio = 0; Portanto: As inserções incrementam o FIM mas o INICIO fica fixo no início do vetor (zero); a) Tamanho da fila  FIM - INICIO + 1 = FIM - 0 +1 = FIM+1; b) Inicialização: FIM = -1, INICIO = 0; c) Fila vazia : FIM < INICIO; d) Fila cheia : FIM = comprimentoDoVetor - 1

3) Solução híbrida - Compactando na hora certa INICIO variável, como feito na alternativa 1, aliado à compactação como em 2. Ao invés da compactação ocorrer a cada remoção, o critério para realiza-la seria detectar um falso sinal de “fila cheia”: inserção( ) /* fila cheia fim== comprimentoDoVetor-1 */ Se (fila cheia) /* tamanhoDaFila = FIM - INICIO + 1 */ Se(tamanhoDaFila < comprimentoDoVetor) for(i=0; i < tamanhoDaFila; i++) memcpy(p->vetFila[i],p->vetFila[i+inicio],p->tamInfo); p->final -= p->inicio; p->inicio = 0; inserção no final da fila; Senão FILA realmente cheia; Senão ..........

Independentemente da opção 2 ou 3, a compactação da Fila pode ser uma operação bastante lenta. Se a estrutura possuir N posições e a fila de dados possuir N-1 elementos, serão necessárias N-2 movimentos, dos N-2 elementos desde o final da fila.

4) Fila Circular Considera o vetor como um arranjo circular, como se o seu final se ligasse ao seu início, não havendo interrupção. Na implementação sobre um vetor (ESTÁTICA) a fila circular torna-se bastante vantajosa, pois viabiliza a reutilização das posições desocupadas sem a necessidade de movimentação de dados. CONSEQÜÊNCIA: FIM < INICIO NÃO MAIS IMPLICA EM FILA VAZIA

K ) J ) Aqui consideraremos que a partir do INICIO alcança-se o FIM explorando a fila no sentido horário: X0,X1,X2,X3,X4

E agora... Se FIM < INICIO não mais implica em fila VAZIA ! Como testar tal condição ? Acrescentando-se um campo tamanhoDaFila à estrutura interna do TDA fila, o qual serviria como parâmetro para definir se o estado da fila é vazia ou cheio independentemente de INICIO e FIM. a) Inicialização: FIM = -1, INICIO = 0; b)Tamanho da fila  dado explicito na estrutura; c) Fila vazia : tamanho da fila = 0; d) Fila cheia : tamanho da fila = comprimentoDoVetor

Estrutura Fila Circular Estática: typedef struct { void **vetFila; int comprimentoDoVetor; int tamInfo; int inicio; /* indexa o início da Fila */ int fim; /*indexa o final da Fila */ int tamanhoDaFila; /* testes de vazia/cheia */ } Fila;

inserção( ) SE (tamanho atual da fila < tamanho do vetor) /* há espaço no início do vetor */ SE (FIM = = tamanho do vetor-1) /* utilize o aspecto circular */ FIM = 0; memcpy(p->vetFila[FIM],novo,p->tamInfo); SENÃO memcpy(p->vetFIla[++FIM],novo,p->tamInfo); tamanho atual da fila ++ fila realmente cheia!! Alternativa p/ controle da “circularidade”: SE (FIM == tamanhoDovetor - 1) FIM = (FIM+1)%tamanho do vetor vetor[FIM] = novo tamanho atual da fila ++ Sentido da circulação

Remoção( ) SE(tamanho da fila = = 0) fila vazia SENÃO SE (INICIO = = tamanho do vetor) INICIO = 0 INICIO++ tamanho da fila - - Alternativa p/ controle da “circularidade”: SENÃO INICIO = (INICIO+1)%tamanho do vetor tamanhoDaFila - - Sentido da circulação

(Outra alternativa para gerenciar inicio/fim na fila circular) b) Abrir mão de um espaço na fila fazendo INICIO ser sempre uma posição antes do inicio real da Fila, então: se INICIO = = FIM => fila vazia como em (a); se (FIM+1) = = INICIO => fila cheia como em (m);

inserção e remoção para Fila Circular como em (B): insercao( ) if(FIM == MAX-1) FIM = 0; else FIM++; if ((FIM +1) = = INICIO) erro fila cheia memcpy(fila[FIM],novo,tamInfo); remocao( ) if (FIM= =INICIO) erro fila vazia else if( INICIO= = MAX-1) INICO = 0; INICIO++;