Filas.

Slides:



Advertisements
Apresentações semelhantes
Listas encadeadas Prof. Rosana Palazon.
Advertisements

Algoritmos de manipulação de estruturas elementares de dados
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
David Menotti Algoritmos e Estruturas de Dados I DECOM – UFOP
Listas Encadeadas.
INTELIGÊNCIA ARTIFICIAL
Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação
Faculdade de Informática e Tecnologia de Pernambuco ESTRUTURA DE DADOS
Estruturas de Dados PROFESSOR DIÓGENES FURLAN. Estruturas de Dados (ED) Programas operam sobre dados Dados são relacionados e possuem estrutura Como representar.
Busca Sequencial Int pseq(int x, int n, int v[]){ for(i=0; i
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.
UNIVERSIDADE FEDERAL DE MINAS GERAIS Pilhas e Filas Cristiano Arbex Valle Vinicius Fernandes dos Santos
1 Bibliografia 1. WIRTH, Niklaus. Algoritmos e estruturas de dados. 2. TENEMBAUM, Aaron. Estruturas de Dados usando C. 3. MORAES, Celso. Estruturas de.
UNIVERSIDADE FEDERAL DE MINAS GERAIS Listas Lineares Cristiano Arbex Valle Vinicius Fernandes dos Santos
Estrutura de Dados (DPADF 0056) Aula 5 – Estr. Clássicas - Fila Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior.
Listas de Prioridades Cinéticas Tese de Mestrado de: Guilherme Dias da Fonseca (bolsista CAPES) Orientadora: Celina M. H. de Figueiredo 03/2003.
Linguagem de Programação – Aula 03 Prof. Me. Ronnison Reges Vidal.
Estrutura de Dados (DPADF 0056) Aula 8 – Estr. Clássicas - Lista Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior.
Disciplina: Estrutura de Dados Professor: Jeovane Reges Caxias – MA 2015 ACULDADE DE CIÊNCIAS E TECNOLOGIA DO MARANHÃO.
Princípios de Desenvolvimento de Algoritmos MAC122 Prof. Dr. Paulo Miranda IME-USP Variáveis e Atribuições.
Algoritmos e Estruturas de Dados I
Introdução à Computação para Engenharia MAC2166
Introdução e Conceitos.
Algoritmo e Lógica Programação Vetores e Matrizes
INF1007: Programação 2 8 – Listas Encadeadas
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS Aulas Práticas – 2016
Algoritmos e Estruturas de Dados I
INE5408 Estruturas de Dados
ESTATÍSTICA . SÍNTESE DO 10.º ANO . RELAÇÕES BIDIMENSIONAIS (11.º ANO)
Fundamentos de Programação 1
Estruturas de Repetição
Linguagem C Para programadores Python
INF1007 – Programação 2 9 – Pilhas
Capítulo VIII – Técnicas de Ordenação
Algoritmos e Estruturas de Dados I
Prof. Wellington Franco
Estrutura de dados Pilhas e filas
O Problema dos Leitores e Escritores
EGP, CPC, 2004/05 Problema e Algoritmos de Colocação de Professores
Capítulo IV – Árvores Gerais
Análise de Algoritmo Profº Me. Jeferson Bussula Pinheiro
FUNDAMENTO DE PROGRAMAÇÃO
UNIDADE 7 Tipos estruturados
Cadastro de Funcionário
INE 5201 – INTRODUÇÃO À CIÊNCIA DA COMPUTAÇÃO
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS
Algoritmos e Programação MC102
Listas Encadeadas.
Cálculo do clique maximal de um grafo
Elaboração de Casos de Teste Funcionais RUP
Pesquisa e Ordenação de Vetor
Organização básica de arquivos
COMPUTAÇÃO BIOINSPIRADA
Estruturas de Dados aula 4
Complexidade de Algoritmos
Função de buscar elemento na lista simplesmente encadeada
Linguagem PASCAL Tipos Estruturados
EDA - Prof. Paulemir Campos
Estruturas de Dados aula 3
Prof. Rafael Mesquita Pilha Prof. Rafael Mesquita
Trabalho de Conclusão de Curso I
Filas Prof. Kariston Pereira
Dinâmica de Sistemas Uma visão geral.
Prof. Rafael Mesquita Fila Prof. Rafael Mesquita
Mestrado Profissional em Física Médica
Prof. Rafael Mesquita Listas Encadeadas Prof. Rafael Mesquita
Ementário Noções de hardware e software. Conceitos Fundamentais.
Aula 7 Professores: Conteúdo: Dante Corbucci Filho
Sistemas de Informação
Aula 8 Professores: Conteúdo: Dante Corbucci Filho
Transcrição da apresentação:

Filas

Filas Outro caso particular de Lista Linear Conjunto ordenado de itens onde as inclusões só podem ser feitas em uma extremidade (fim da fila) e as remoções só podem ser feitas na outra extremidade (início da fila) Exemplo real clássico: fila de pessoas esperando 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

Filas Devido às características das operações da fila, o primeiro elemento inserido será o primeiro a ser retirado A política de inserção e remoção de dados à maneira de uma fila é conhecida como "FIFO" (First In, First Out) Filas são usadas tipicamente quando deseja-se processar itens de acordo com sua ordem de chegada

A B C A B C A B C Filas Aplicação em Computação: Fila de Impressão Exemplo: A B início fim C A B C início fim A B C início fim

Filas – Operações Básicas Seja F uma fila, e e um elemento: insere(F, e): e é inserido no final da fila F retira(F, e): retira o elemento mais antigo da fila F (o elemento que está no início de F) e retorna seu valor através de e vazia(F): indica se a fila está vazia ou não comp(F): retorna o número de elementos na fila F (comprimento da fila)

fila A B C A B C A B C Filas - Exemplo insere(fila,A); insere(fila,B); insere(fila,C); ok=retira(fila,e); A B início fim C A B C início fim A B C início fim

Funções Básicas: Fila – Funções Básicas vazia(&fila); inicia(&fila); retira(&fila, &e); insere(&fila, e); 105

Filas 2ª PARTE

Filas - Implementações Diversas formas de implementar, que se distinguem por: natureza dos elementos maneira como elementos são armazenados operações disponíveis Duas formas clássicas: Listas Seqüenciais (Vetor) Lista Encadeada 104

Filas em Listas Seqüenciais Problema: vetor tem tamanho fixo e limitado, enquanto que a fila cresce com a necessidade, sem limite Solução: limitar o tamanho máximo da fila ao tamanho do vetor Problema: impossível remover elemento de uma fila vazia Solução: utilizar a função vazia(F) antes de remover elemento Problema: controlar início e fim da fila Solução: incluir dois campos (ini e fim) para armazenar a posição do início e do fim da fila 105

Filas com Vetor #define MAX 100 typedef int tp_item; typedef struct { tp_item item[MAX]; int ini,fim; } tp_fila; tp_fila fila; 105

Filas com Vetor Considerações Iniciais: fila.fim=-1; /* posição do último elemento */ fila.ini=0; /* posição do primeiro elemento */ Fila Vazia: (fila.fim<fila.ini) Fila Lotada: (fila.fim==MAX-1) No de elementos: (fila.fim-fila.ini+1) Função insere: f.item[++f.fim]=e; Função retira: *e=f.item[f.ini++]; 105

Filas com Vetor Problema: ini e fim avançam à medida em que são feitas inclusões e remoções pode acontecer de a fila ter espaço mas ser considerada lotada (situação 4)!!  A B 0 1 2 3 4 ini: 0 fim: -1 MAX: 5 ini: 2 fim: 2 MAX: 5 C (1) (3)  A B C  D E ini: 0 fim: 2 MAX: 5 ini: 2 fim: 4 MAX: 5 A B C C D E (2) (4) 105

Filas com Vetor Solução 1: modificar retira para deslocar a fila no sentido do início do vetor a cada remoção e eliminar o campo fila.ini  início é sempre no 0 e=f.item[0]; for (i=0; i<fila.fim; i++) fila.item[i]=fila.item[i+1]; Fila vazia: (fila.fim==-1)  A B fim: -1 MAX: 5 fim: 0 MAX: 5 C (1) (3)  A B C  D E fim: 2 MAX: 5 fim: 2 MAX: 5 A B C C D E (2) (4) 105

Filas com Vetor Problemas com a Solução 1: Cada eliminação envolve deslocar todos os elementos restantes da fila  Ineficiência (principalmente para grandes filas) A definição da operação de remoção envolve a manipulação de apenas um elemento e a sua implementação deve refletir este fato, sem envolver operações adicionais 105

Filas com Vetor Outra Solução? 105

Fila Circular Solução 2: visualizar o vetor que armazena a fila como um círculo  Fila Circular se o último elemento da fila ocupa a última posição do vetor, um novo elemento pode ser inserido no início do vetor  A B 0 1 2 3 4 ini: 0 fim: -1 MAX: 5 ini: 2 fim: 3 MAX: 5 C D (1) (3)  A B C D  E F G ini: 0 fim: 3 MAX: 5 ini: 2 fim: 1 MAX: 5 A B C D F G C D E (2) (4) 105

Fila Circular Outras considerações: int prox (int pos) { Função para determinar o próximo elemento: int prox (int pos) { if (pos==MAX-1) return 0; else return pos+1; } /* outra opção */ int prox (int pos) { return (pos+1)%MAX; } 105

Fila Circular – Fila Vazia Determinação de Fila Vazia?  não pode mais ser feita por (fila.fim<fila.ini) 0 1 2 3 4 0 1 2 3 4 ini: 0 fim: -1 MAX: 5 ini: 2 fim: 1 MAX: 5 F G C D E (1) (4)   105

Fila Circular – Fila Vazia Problema com a Fila Circular: determinação de Fila Vazia não pode mais ser feita com (fila.fim<fila.ini) Solução: considerar que fila.ini é a posição anterior ao primeiro elemento da fila Para verificar se a fila está vazia: (fila.ini==fila.fim) Para inicializar  início e fim com última posição: fila.ini = fila.fim = MAX-1; (precede posição 0) 105

Fila Circular – Fila Vazia Determinação de Fila Cheia? F G H I E ini: 3 fim: 3 MAX: 5 (4)  E F G H I Como distinguir Fila Cheia de Fila Vazia? Ambas são: (fila.ini==fila.fim) Solução! (fila.ini==fila.fim)  A B C D 0 1 2 3 4 0 1 2 3 4 ini: 4 fim: 4 MAX: 5 ini: 3 fim: 3 MAX: 5 (1) (3)  A B C D  E F G H ini: 4 fim: 3 MAX: 5 ini: 3 fim: 2 MAX: 5 A B C D F G H E (2) (4) 105

Fila Circular – Fila Cheia Problema: Determinação de Fila Cheia  Situação idêntica à da Fila Vazia Solução: “sacrificar” uma posição do vetor, permitindo incluir apenas MAX-1 elementos há sempre uma posição vazia para marcar início/fim da fila Teste de Fila Cheia: prox(fila.fim)==fila.ini 105

Fila Circular – Fila Cheia Fila Vazia (fila.ini==fila.fim)  A B C D 0 1 2 3 4 0 1 2 3 4 ini: 4 fim: 4 MAX: 5 ini: 3 fim: 3 MAX: 5   (1) (3)  A B C D  E F G H ini: 4 fim: 3 MAX: 5 ini: 3 fim: 2 MAX: 5 A B C D  F G H  E (2) (4) Fila Cheia (prox(fila.fim)==fila.ini) 105

Fila Circular – Fila Cheia Outra Solução: Adicionar um novo campo (tam) na estrutura para armazenar o número de elementos na fila Fila Vazia: (fila.tam==0) Fila Cheia: (fila.tam==MAX-1) Solução não adotada pela maioria dos autores e programadores 105

Funções Básicas: Fila Circular vazia(&fila); inicia(&fila); retira(&fila, &e); insere(&fila, e); 105

Fila Circular Função vazia(&fila): int vazia(tp_fila *f) { if (f->ini == f->fim) return 1; else return 0; } /* outra opção */ return (f->ini==f->fim); Função inicia(&fila): void inicia (tp_fila *f) { f->ini=f->fim=MAX-1; } 105

Fila Circular int retira(tp_fila *f, tp_item *e) { if (vazia(f)) return 0; else { f->ini=prox(f->ini); *e=f->item[f->ini]; return 1; } 105

Fila Circular int insere(tp_fila *f, tp_item e) { if (prox(f->fim)==f->ini) return 0; else { f->fim=prox(f->fim); f->item[f->fim] = e; return 1; } 105

Fila Circular ? Como percorrer a Fila? 105

Fila Circular Para percorrer: /*outra forma */ i=fila.ini; while (i!=fila.fim) { i=prox(i); printf("%d\t",fila.item[i]); } printf("\n"); Para percorrer: if (!vazia(&fila)) { i=fila.ini; do { i=prox(i); printf("%d\t",fila.item[i]); } while (i!=fila.fim); printf("\n"); } 105