Fila e Deque. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Documentos relacionados
Fila e Deque. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Listas Estáticas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Listas Estáticas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Filas de Prioridade & Heaps

Matrizes Esparsas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista

Filas Implementação Sequencial

Árvores Binárias. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich

Pilhas e Filas Encadeadas. Algoritmos e Estruturas de Dados I

Pilha. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof. Gustavo Batista

Estrutura de Dados. Carlos Eduardo Batista. Centro de Informática - UFPB

Filas. Prof. Túlio Toffolo BCC202 Aula 12 Algoritmos e Estruturas de Dados I

Matrizes Esparsas. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof.

Pilha. SCC Algoritmos e Estruturas de Dados I. Prof. Fernando V. Paulovich. *Baseado no material do Prof. Gustavo Batista

REVISÃO DE PILHAS E FILAS. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Aula 07: Filas

Filas. Prof. Rui Jorge Tramontin Jr. UDESC - Rui J. Tramontin Jr. 1

Árvores Binárias de Busca

ASSOCIAÇÃO PARAIBANA DE ENSINO RENOVADO FACULDADE PARAIBANA DE PROCESSAMENTO DE DADOS ESTRUTURA DE DADOS

CES-11. Pilhas Definição Operações Filas. Operações Deques. Definição. Operações

Instituto de C. Filas. Luis Martí Instituto de Computação Universidade Federal Fluminense -

Filas. Nesta aula veremos o ADT fila Em um computador existem muitas filas esperando pela impressora, acesso ao disco ou, num sistema timesharing,

Listas Lineares Ordenadas

Estruturas de Dados. Módulo 12 - Filas. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Universidade Federal do Ma Curso de Ciência da Computação

LISTAS LINEARES. Estrutura de Dados

Estruturas de Dados - Filas

BCC202 - Estrutura de Dados I

FILAS. As coisas de que uma fila é feita serão chamadas itens. Os itens podem ser números, strings, structs, etc., etc.

A regra de acesso aos dados de uma fila é a seguinte: O primeiro elemento que entra (na fila) é o primeiro que sai (FIFO first in, first out).

Heaps. Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação 1 / 35

BCC202 - Estrutura de Dados I

Aplicações de listas e outras estruturas. SCC-502 Algoritmos e Estruturas de Dados I

Listas Lineares. continuando...

Estruturas de Dados Filas

Estruturas de Dados Aula 11: TAD Pilha

Listas ordenadas. SCC-202 Algoritmos e Estruturas de Dados I. Prof. Thiago A. S. Pardo. Listas em que os elementos estão ordenados por algum critério

Filas Exemplo de Aplicação

SCC122 - Estruturas de Dados. Lista Estática Seqüencial

Estruturas de Dados. Filas em que a prioridade de remoção não é cronológica. Maior prioridade não é do elemento que ingressou primeiro

Aula 7 e 8 Filas e suas Aplicações. Prof. Leticia Winkler

LP II Estrutura de Dados

UNIVERSIDADE DA BEIRA INTERIOR

12. Filas Interface do tipo fila

Algoritmos e Estruturas de Dados II IEC013

Universidade Estadual Paulista Júlio de Mesquita Filho UNESP

Estrutura de Dados Listas

Universidade de São Paulo

LISTAS ENCADEADAS OU NÃO- SEQÜENCIAIS. Estrutura de Dados

Listas ordenadas. Listas ordenadas. Listas ordenadas. Listas ordenadas. Listas ordenadas. Listas ordenadas. Definição

Melhores momentos AULA 14

Aula 14 Listas Duplamente Encadeadas. prof Leticia Winkler

Aplicações de listas e outras estruturas

1. Listas sequenciais versus listas ligadas. Lista sequencial

Fila. 26 e 31/8/2008 Representação/Implementação: Seqüencial estática Encadeada dinâmica Exercícios/Aplicações

Algoritmos e Estruturas de Dados Prof. Osório PIP/CA - Aula 03 Pag.: 1

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

Aplicações de listas e outras estruturas. SCC-502 Algoritmos e Estruturas de Dados I

Pilhas e Filas. Livro Projeto de Algoritmos Nívio Ziviani Capítulo 3 Seção 3.2 e 3.3

INF 1620 P2-01/11/03 Questão 1 Nome:

Algoritmos e Estruturas de Dados I

Estrutura de Dados: Lista Linear. Parte I Introdução e Listas Sequenciais Estáticas

Algoritmos e Estrutura de Dados II. Árvore AVL. Prof Márcio Bueno. / Material da Prof a Ana Eliza

Programação II. Listas Encadeadas (Linked Lists) Bruno Feijó Dept. de Informática, PUC-Rio

Estrutura de Dados: Lista Linear. Parte I Introdução e Listas Sequenciais Estáticas

S U M Á R I O. Definição de Estrutura de Dados. Vetores. Listas Ligadas. Pilhas. Filas

ESTRUTURAS DE DADOS E ALGORITMOS LISTA LIGADA

Algoritmos, Estruturas de Dados e Tipos Abstratos de Dados (TADs)

Fila. SCC0502 Algoritmos e Estruturas de Dados I. Prof. Thiago A. S. Pardo

22/08/2011. Fila. SCC0202 Algoritmos e Estruturas de Dados I. Prof. Thiago A. S. Pardo. Fila. O que é? Para que serve?

Estrutura de Dados e Algoritmos e Programação e Computadores II. Aula 4: Listas Estáticas e Dinâmicas

Aula 11 Pilha Dinâmica. prof Leticia Winkler

Aplicações de listas Outras estruturas

Estruturas de Dados Encadeadas

UNIVERSIDADE DA BEIRA INTERIOR

Revisão de TDA, Pilhas e Filas

Copiar para o ficheiro ArvoreBinaria.h e adaptar as funções associadas às operações sobre árvores binárias (3.1 a 3.12)

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

Fila. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

UNIVERSIDADE DA BEIRA INTERIOR

Fila. 26 e 31/8/2008 Representação/Implementação: Seqüencial estática Encadeada dinâmica Exercícios/Aplicações

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

Listas Encadeadas. David Menotti Algoritmos e Estruturas de Dados II DInf UFPR

Introdução à Computação II (Noturno) BCC Unesp Rio Claro/SP 2015 em PDF via Moodle: Escolha apenas 5 exercícios para entrega Exercício 01 (Pilhas)

Árvores Estrutura de Dados. Universidade Federal de Juiz de Fora Departamento de Ciência da Computação

Matrizes Esparsas. atribuição (M, i, j, v) (i, j) IND. v nulo. v não nulo v nulo v não nulo. há espaço. não há espaço. retira substitui nada

Lista de Exercícios sobre Listas Implementadas por Encadeamento

Computadores Digitais 2. Prof. Rodrigo de Souza Couto

Árvores. SCC-202 Algoritmos e Estruturas de Dados I. Lucas Antiqueira

Filas. Estruturas de Dados. O TAD Fila. Inserções e remoções seguem a política First-in First-out. Operações auxiliares:

Aplicação de Árvores: Código de Huffman

Fila. Algoritmos e Estruturas de Dados I

Lista: conceito, representação e algoritmos

Métodos Computacionais. Listas Encadeadas

Lista Encadeada (Linked List)

DAINF - Departamento de Informática

Pilhas e Filas. Nádia Félix e Hebert Coelho

Transcrição:

Fila e Deque SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic paulovic@icmc.usp.br Instituto de Ciências Matemáticas e de Computação (ICMC) Universidade de São Paulo (USP) 29 de setembro de 2010

Sumário 1 2 Deques

Sumário 1 2 Deques

TAD Fila são estruturas lineares nas quais as inserções são feitas em um extremo (final) e remoções são feitas no outro extremo (início) Seguem a política First-in, First-out (FIFO) Modelos intuitivos de filas são as linhas para comprar bilhetes de cinema e de caixa de supermercado

Aplicações Exemplos de aplicações de filas de espera e algoritmos de simulação Controle por parte do sistema operacional a recursos compartilhados, tais como impressoras Buffers de Entrada/Saída Estrutura de dados auxiliar em alguns algoritmos como a busca em largura

TAD Fila Operações principais enfileirar(f,x): insere o elemento x no final da fila F. Retorna true se foi possível inserir false caso contrário desenfileirar(f): remove o elemento no inicio de F, e retorna esse elemento. Retorna true se foi possível remover false caso contrário

TAD Fila Operações auxiliares frente(f): retorna o elemento no início de F, sem remover contar(f): retorna o número de elementos em F vazia(f): indica se a fila F está vazia cheia(f): indica se a fila F está cheia (útil para implementações estáticas)

Implementação Estática Uma maneira simples de implementar uma fila é fixar o início da fila na primeira posição do vetor As inserções (enfileira) fazem com que o contador f seja incrementado (O(1)) Mas as remoções (desenfileira) requerem deslocar todos os elementos (O(n)) É possível melhorar isso?

Implementação Estática Circular A solução é fazer com que o início não seja fixo na primeira posição do vetor Portanto, deve-se manter dois contadores para o início (i) e final da fila (f) Mas o que deve ser feito quando f = N e deseja-se inserir mais um elemento?

Implementação Estática Circular Pode-se permitir que f volte para o início do vetor quando esse contador atingir o final do vetor Essa implementação é conhecida como fila circular Na figura abaixo a fila circular possui 4 posições vagas e f < i

Definição de Tipos 1 #define TAM 100 2 3 typedef struct { 4 int valor; 5 } ITEM; 6 7 typedef struct { 8 ITEM itens[tam]; 9 int fim; 10 int inicio; 11 } FILA_ESTATICA;

Implementação Estática Circular Caso o inicio aponte para o primeiro elemento inserido e o fim aponte para o último, não é possível distinguir se uma fila está cheia ou vazia Uma estratégia seria apontar o fim para a próxima posição de inserção Assim, se a próxima posição do fim for igual ao inicio, a fila está cheia Perde-se uma posição no vetor (a fila terá TAM-1 posições de inserção)

Implementação Estática Circular 1 void criar(fila_estatica *fila) { 2 fila->fim = 0; 3 fila->inicio = 0; 4 } 5 6 int vazia(fila_estatica *fila) { 7 return (fila->inicio == fila->fim); 8 } 9 10 int cheia(fila_estatica *fila) { 11 return (((fila->fim+1) % TAM) == fila->inicio); 12 }

Implementação Estática Circular 1 int enfileirar(fila_estatica *fila, ITEM *item) { 2 if (!cheia(fila)) { 3 fila->itens[fila->fim] = *item; //insiro o item 4 fila->fim = (fila->fim+1) % TAM; //avanço o fim para a próxima posição vazia 5 return 1; 6 } 7 return 0; 8 }

Implementação Estática Circular 1 int desenfileirar(fila_estatica *fila, ITEM *item) { 2 if (!vazia(fila)) { 3 *item = fila->itens[fila->inicio]; //recupero o primeiro item 4 fila->inicio = (fila->inicio+1) % TAM; //avanço o fim para a próxima posição vazia 5 return 1; 6 } 7 return 0; 8 }

Implementação Estática Circular 1 int contar(fila_estatica *fila) { 2 if (fila->fim >= fila->inicio) { 3 return (fila->fim - fila->inicio); 4 } else { 5 return (TAM - (fila->inicio - fila->fim)); 6 } 7 }

Implementação Dinâmica A implementação dinâmica pode ser realizada mantendo-se dois ponteiros, um para o início e outro para o final da fila Com isso pode-se ter acesso direto às posições de inserção e remoção

Implementação Dinâmica As operações enfileira e desenfileira implementadas dinamicamente são bastante eficientes Deve-se tomar cuidado apenas para que os ponteiros para início e final da final tenham valor NULL quando ela estiver fazia

Estática versus Dinâmica Operação Estática Dinâmica Cria O(1) O(1) Enfileira O(1) O(1) Desenfileira O(1) O(1) Frente O(1) O(1) Vazia O(1) O(1) Conta O(1) O(1) (c/ contador)

Estática versus Dinâmica Estática Implementação simples Tamanho da fila definido a priori Dinâmica Alocação dinâmica permite gerenciar melhor estruturas cujo tamanho não é conhecido a priori ou que variam muito de tamanho

Deques Sumário 1 2 Deques

Deques TAD Deques Deques são estruturas lineares que permitem inserir e remover de ambos os extremos Operações principais inserir_inicio(d,x): insere o elemento x no início do deque D. Retorna true se foi possível inserir false caso contrário inserir_fim(d,x): insere o elemento x no final do deque D. Retorna true se foi possível inserir false caso contrário remover_inicio(d): remove o elemento no inicio de D, e retorna esse elemento. Retorna true se foi possível remover false caso contrário remover_fim(d): remove o elemento no final de D, e retorna esse elemento. Retorna true se foi possível remover false caso contrário

Deques TAD Deques Operações auxiliares primeiro(d): retorna o elemento no início de D. Retorna true se o elemento existe false caso contrário ultimo(d): retorna o elemento no final de D. Retorna true se o elemento existe false caso contrário contar(d): retorna o número de elementos em D vazia(d): indica se o deque D está vazio cheia(d): indica se o deque D está cheio (útil para implementações estáticas)

Deques TAD Deques Como deques requerem inserir e remover elementos em ambos os extremos Implementação estática circular Implementação dinâmica duplamente encadeada Nesses casos, as operações do TAD são O(1)

Deques Implementação Estática Circular Aproveita-se a implementação de uma lista circular estática e acrescenta as duas operações que faltam: (1) remover do fim; e (2) inserir no início As outras operações são as mesmas

Deques Implementação - Inserir no Início 1 int inserir_inicio(deque_estatica *deque, ITEM *item) { 2 if (!cheia(deque)) { 3 deque->inicio = deque->inicio-1; 4 if (deque->inicio < 0) { 5 deque->inicio = TAM - 1; 6 } 7 8 deque->itens[deque->inicio] = *item; //insiro o item 9 10 return 1; 11 } 12 13 return 0; 14 }

Deques Implementação - Remover do Fim 1 int remover_fim(deque_estatica *deque, ITEM *item) { 2 if (!vazia(deque)) { 3 deque->fim = deque->fim-1; 4 if (deque->fim < 0) { 5 deque->fim = TAM - 1; 6 } 7 8 *item = deque->itens[deque->fim]; //recupero o primeiro item 9 10 return 1; 11 } 12 13 return 0; 14 }

Deques Exercícios Implemente uma fila dinâmica Implemente uma deque dinâmica Implemente um procedimento recursivo capaz de esvaziar uma fila Implemente um procedimento para inverter uma fila (o primeiro elemento se tornará o último e vice-versa)