Filas Prof. Kariston Pereira

Slides:



Advertisements
Apresentações semelhantes
Marco Antonio Montebello Júnior
Advertisements

Pilhas e Filas CONTEÚDO (1) Pilhas (2) Filas.
Programação Avançada I
Programação II Estruturas de Dados
ESTRUTURAS DO TIPO FILA
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
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.
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
Filas. #define MAXFILA 100 typedef struct queue { int item [ MAXFILA]; int inic, fim; } fila; fila q;
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.
Ponteiros em C Prof. Kariston Pereira
Arrays e Matrizes na Linguagem C Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
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
1 Bibliografia 1. WIRTH, Niklaus. Algoritmos e estruturas de dados. 2. TENEMBAUM, Aaron. Estruturas de Dados usando C. 3. MORAES, Celso. Estruturas de.
INE5408 Estruturas de Dados Estruturas de Dados básicas utilizando Vetores - Listas.
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.
Estrutura de Dados (DPADF 0056) Aula 7 – Encadeamento de Memória Universidade Federal de Santa Maria Colégio Agrícola de Frederico Westphalen Curso Superior.
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.
Linguagem Lógico-Funcional Curry Gabriel Cardoso Jeferson Rubert
Lógica de Programação Aula 26 Prof. Auler Gomes.
Algoritmos e Estruturas de Dados I
Introdução à Computação para Engenharia MAC2166
Algoritmo e Lógica Programação Vetores e Matrizes
INF1007: Programação 2 8 – Listas Encadeadas
Algoritmos e Estruturas de Dados I
Algoritmos e Estruturas de Dados I
Ordenação dos Elementos de um Vetor - Bubble Sort e Quick Sort .
INE5408 Estruturas de Dados
Fundamentos de Programação 1
Algoritmos e Estruturas de Dados I
INF1007 – Programação 2 9 – Pilhas
Módulo I Capítulo 3: Fluxo de Código e Operador Condicional
Algoritmos e Estruturas de Dados I
Estrutura de dados Pilhas e filas
Introdução à Programação BCC 201 Aula
Vantagens e desvantagens da recursão
Estruturas de Dados Vetores.
FUNDAMENTO DE PROGRAMAÇÃO PROF. BRUNO DE CASTRO H. SILVA
FUNDAMENTO DE PROGRAMAÇÃO
IP – Repetições Prof. Eduardo Falcão.
UNIDADE 7 Tipos estruturados
CES-11 ALGORITMOS E ESTRUTURAS DE DADOS
Algoritmos e Programação MC102
Listas Encadeadas.
Organização básica de arquivos
Estruturas de Dados aula 4
Tipos Abstratos de Dados
LÓGICA DE PROGRAMAÇÃO Estruturas de Decisão
Linguagem de Programação II
EDA - Prof. Paulemir Campos
Árvores Binárias de Pesquisa e Balanceamento usando Árvores AVL
Estruturas de Dados aula 3
Prof. Rafael Mesquita Pilha Prof. Rafael Mesquita
Módulo e Equação Modular
Laboratório I Mateus Raeder.
Prof. Rafael Mesquita Fila Prof. Rafael Mesquita
Estruturas de Dados em C
Filas.
Arrays de caracteres: strings
ALGORITMOS.
Prof. Rafael Mesquita Listas Encadeadas Prof. Rafael Mesquita
Vetores.
Introdução a progrmação Comandos condicionais: if e switch
RESULUÇÃO DOS EXERCÍCIOS E
Transcrição da apresentação:

Filas Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC) 1

UDESC – Prof. Kariston Pereira Índice Introdução Aplicações Implementação / Modelagem Operações de uma fila TAD da Fila em C UDESC – Prof. Kariston Pereira 2

UDESC – Prof. Kariston Pereira Introdução Fila é uma lista na qual as inserções são feitas em um lado (no fim da fila) e exclusões são feitas lado oposto (no início da fila). O primeiro elemento inserido será o primeiro a ser removido. São também chamadas de listas FIFO (First In First Out). sai entra início fim UDESC – Prof. Kariston Pereira

UDESC – Prof. Kariston Pereira Introdução Características das filas: Dados são organizados pela ordem de entrada. Tipos de filas: Filas de espera (queues); Filas com duplo fim (deque “double-ended queue”); Filas de espera com prioridades (priority queues). UDESC – Prof. Kariston Pereira

UDESC – Prof. Kariston Pereira Aplicações Filas do sistema operacional Processos, impressão, etc. Simulação Filas para recursos quaisquer (ex. fila de banco). UDESC – Prof. Kariston Pereira

UDESC – Prof. Kariston Pereira Operações de uma Fila inicializa_fila(F) : criar uma fila F vazia. insere(item, F) : insere item no fim de F. remove(F) : elimina o elemento do início de F. inicio(F) : acessa o elemento do início da fila (sem eliminar). estah_vazia(F) : testa se F está vazia. esta_cheia(F) : testa se F está cheia. UDESC – Prof. Kariston Pereira

UDESC – Prof. Kariston Pereira Exemplo 12 5 12 inicializa() insere(12) insere(5) insere(14) 14 14 5 14 5 12 remove() remove() UDESC – Prof. Kariston Pereira

UDESC – Prof. Kariston Pereira Implementação Usando vetores (circulares ou não). Utilizando alocação dinâmica (lista encadeada). O foco desta aula será na implementação usando vetores. UDESC – Prof. Kariston Pereira

Implementação usando Vetores Vantagens: Facilidade de implementação. Desvantagens: Vetores possuem um espaço limitado para armazenamento de dados. Necessidade de definir um espaço grande o suficiente para a fila. Necessidade de um indicador para o início e para o fim da fila. UDESC – Prof. Kariston Pereira

Implementação usando Vetores Método de Implementação: A adição de elementos à fila resulta no incremento do indicador do fim da fila. A remoção de elementos da fila resulta no incremento do indicador do início da fila. Nessa abordagem, a fila rapidamente perderá espaço para a inserção de mais elementos! Como resolver isso? UDESC – Prof. Kariston Pereira

Implementação usando Vetores Soluções comuns: Juntar os elementos sempre à esquerda, cada vez que se faz uma remoção! (Não recomendado, baixo desempenho) Imaginar o vetor como sendo circular, isto é, unir o fim do vetor ao seu início. (Melhor implementação!!) UDESC – Prof. Kariston Pereira

UDESC – Prof. Kariston Pereira Modelagem da Fila Aspecto Estrutural: Vetor para armazenar as informações. Indicadores das posições de início e fim da fila. Constantes que indiquem o tamanho da fila e para codificar situações de erros. Pseudo-código: constantes MaxFila 100; ErroFilaVazia -1; // Underflow ErroFilaCheia -2; // Overflow tipo Fila { inteiro dados[MaxFila]; inteiro inicio; inteiro fim; }; UDESC – Prof. Kariston Pereira

UDESC – Prof. Kariston Pereira Inicialização da Fila procedimento inicializa_fila(var f: Fila) início f.inicio <- 0; f.fim <- 0; fim UDESC – Prof. Kariston Pereira

UDESC – Prof. Kariston Pereira Insere na Fila função insere(var f: Fila; item: inteiro): inteiro início se estah_cheia(f) então retorne ErroFilaCheia senão f.dados[f.fim] <- item se f.fim = MaxFila-1 então f.fim <- 0; // vetor circular! f.fim <- f.fim + 1; fimse retorne 1 fim UDESC – Prof. Kariston Pereira

UDESC – Prof. Kariston Pereira Remove da Fila função remove(var f: Fila): inteiro var removido: inteiro início se estah_vazia(f) então retorne ErroFilaVazia senão removido <- f.dados[f.incio] se f.inicio = MaxFila-1 então f.inicio <- 0; // vetor circular! f.inicio <- f.inicio + 1; fimse retorne removido fim UDESC – Prof. Kariston Pereira

Retorna Elemento que está no Início da Fila função início(f: Fila): inteiro início se estah_vazia(f) então retorne ErroFilaVazia senão retorne f.dados[f.inicio] fimse fim UDESC – Prof. Kariston Pereira

“Está Cheia” e “Está Vazia” Quando da inicialização da fila, os campos inicio e fim têm valor 0. (Esta poderia ser a condição de fila vazia?) Como a fila é circular, inserções e remoções alteram a posição de início e fim: Se a fila esvaziar, início e fim podem não ser 0. No entanto, serão iguais! (E agora? A fila está vazia se início == fim?) UDESC – Prof. Kariston Pereira

“Está Cheia” e “Está Vazia” No entanto, quando a fila está cheia, início também será igual a fim. PROBLEMA: Como distinguir entre fila cheia e fila vazia? Soluções comuns: Manter sempre uma posição vazia no vetor entre o indicador de início e o indicador de fim. Definir um indicador do número de elementos que a fila contém.  Como exemplo, vamos mostrar esta solução... UDESC – Prof. Kariston Pereira

UDESC – Prof. Kariston Pereira Re-Modelagem da Fila Adicionando o campo que indica o número de elementos. constantes MaxFila 100; ErroFilaVazia -1; // Underflow ErroFilaCheia -2; // Overflow tipo Fila { inteiro dados[MaxFila]; inteiro inicio; inteiro fim; inteiro num_elementos; }; UDESC – Prof. Kariston Pereira

UDESC – Prof. Kariston Pereira Re-Modelagem da Fila Além da estrutura de dados, as seguintes funções devem ser adaptadas: inicializa_fila: num_elementos deve ser inicializado com 0; insere: num_elementos deve ser incrementado (opcionalmente, num_elementos pode ser retornado, ao invés de 1); remove: num_elementos deve ser decrementado; Usando esse indicador, as funções estah_cheia e estah_vazia podem ser facilmente implementadas... UDESC – Prof. Kariston Pereira

Testa se Fila está Cheia função estah_cheia(f: Fila): booleano início se f.num_elementos = MaxFila então retorne VERDADEIRO senão retorne FALSO fimse fim UDESC – Prof. Kariston Pereira

Testa se Fila está Vazia função estah_vazia(f: Fila): booleano início se f.num_elementos = 0 então retorne VERDADEIRO senão retorne FALSO fimse fim UDESC – Prof. Kariston Pereira

UDESC – Prof. Kariston Pereira TAD da Fila em C (Fila.h) // definição de constantes #define MAX_FILA 50 #define ERRO_FILA_VAZIA -1 #define ERRO_FILA_CHEIA -2 // define estrutura e tipo Pilha typedef struct { int dados[MAX_FILA]; int inicio; int fim; int num_elementos; } Fila; // cabeçalho das funções void inicializa_fila(Fila *fila); int estah_vazia(Fila fila); int estah_cheia(Fila fila); int insere(Fila *fila, int valor); int remove(Fila *fila); int inicio(Fila fila); UDESC – Prof. Kariston Pereira

UDESC – Prof. Kariston Pereira Exercício Implementar as operações do TAD: Fila.c; Escrever um programa em C que utilize o TAD Fila. UDESC – Prof. Kariston Pereira