Buscar

Conceito e Operações de Fila em C

Prévia do material em texto

Tipo de Dados Fila
ESTRUTURA DE DADOS
Objetivos de Aprendizagem
 Descrever o conceito de fila, 
interpretando a lei que rege a estrutura;
 Examinar as principais diferenças para 
uma lista e uma pilha;
 Construir uma fila a partir do 
entendimento do conceito;
 Analisar operações de enfileiramento e 
desenfileiramento;
Objetivos de Aprendizagem
 Programar as operações de 
enfileiramento e desenfileiramento;
 Avaliar implementações de fila possíveis.
Agenda
 Conceitos;
 Operações;
 Aplicação prática.
Filas
 Uma fila é um conjunto ordenado de dados 
de itens ou elementos a partir do qual 
podem-se eliminar itens numa extremidade 
(chamada de início da fila) e inserir itens na 
outra extremidade (chamado de final da fila)
 O primeiro elemento inserido na fila, será o 
primeiro a sair
 Por essa razão, uma fila é ocasionalmente 
chamado de lista encadeada FIFO (first in, first
out) – o primeiro que entra é o primeiro a 
sair
Filas
 Existem muitos exemplos de fila no 
mundo real
◦ Fila de banco
◦ Ponto de ônibus
◦ Pedágios de carros
◦ etc
Fila
A B C
início
final
Operações em Fila
 Há três operações primitivas para se 
aplicar em uma fila:
◦ Operação de verificação se a fila é vazia
◦ Operação de inserção
◦ Operação de Consulta e Impressão
◦ Operação de remoção
Operações em Fila
q = fila (queue)
inserir(q, A);
inserir(q, B);
Inserir(q, C);
A B C
início
final
Operações em Fila
q = fila (queue)
remove(q);
B C
início
final
Operações em Fila
q = fila (queue)
inserir(q, D);
inserir(q, E);
B D E
início
final
C
Implementação em C
 Uma Fila pode ser implementada através 
de um vetor ou de uma lista encadeada 
(dinamicamente)
#define TAMMAX 100
struct nodo{
int fila[TAMMAX];
int inicio, fim;
}q;
struct nodo{
int valor;
struct nodo *prox;
}q;
vetor Lista Encadeada
Implementação em C
 Evidentemente, usar um vetor para armazenar 
uma fila introduz a possibilidade de estouro, caso 
a fila fique maior que o tamanho do vetor
 Ignorando momentaneamente a possibilidade de 
underflow e estouro, a operação inserir(q,x) 
poderia ser implementada pelas instruções:
q.fila[++q.fim] = x;
 e a operação x = remove(q) poderia ser 
implementada por:
x = q.fila [q.inicio++]; 
(depois de “remover” faz o início apontar para o 
próximo)
Implementação em C
 Como tratar o underflow e o estouro 
(overflow) da fila ao se usar vetor?
◦ 1) para o tratamento de underflow, geralmente 
se verifica o índice do vetor
 Se o índice começa de 0 (zero) significa que não se 
deve ter índices menores que zero (-1, -2 ...)
 Esse cuidado deve se ter ao remover os itens da fila
◦ 2) Uma boa prática é utilizar uma função que 
verificar se a fila esvaziou
 Ex: if (inicio > fim) return filaVazia;
Implementação em C
 Como tratar o underflow e o estouro 
(overflow) da fila ao se usar vetor?
◦ 1) para o tratamento de overflow, geralmente 
se verifica o tamanho máximo do vetor
 Se o tamanho máximo é X, logo não se deve ter 
índices maiores que X (X+1, X+2 ...)
 Esse cuidado deve se ter ao inserir os itens na fila
◦ 2) Uma boa prática é utilizar uma função que 
verificar se a fila chegou no limite
 Ex: if (fim == TAMMAX) return limiteFila;
Implementação C
B D E
início
fim
C
0
início
3
fim
Após remoção
B D EC
1
início
3
fim
0 1 2 3
Implementação C
 Como uma lista encadeada
 Inserção
A B C D
início
fim
novoNodo = criaNodo(valor);
fim->prox = novoNodo;
fim = novoNodo;
fim
novoNodo
Implementação C
 Como uma lista encadeada
 Remoção
A B C D
início
fim
aux = inicio;
inicio = inicio->prox;
free(aux);
início
aux
Tipo de Dados Fila
ESTRUTURA DE DADOS