Beruflich Dokumente
Kultur Dokumente
Objetivos
Explorar os conceitos fundamentais acerca do uso
de filas utilizando a linguagem C
Organizao e implementao, caractersticas,
vantagens, desvantagens, regras de utilizao,
operaes bsicas e algoritmos de implementao
Motivao
Uma das estruturas de dados mais utilizadas em
programao a fila
Um exemplo de utilizao em computao a
implementao de uma fila de impresso
A idia fundamental
S podemos inserir um novo n no final da fila
S podemos retirar a partir do incio da fila
Estratgia
Pode-se fazer uma analogia com uma fila de clientes
em um banco qualquer:
o primeiro a entrar na fila, ser o primeiro a sair e ser
atendido (retiramos ele do incio ou frente da fila)
o ltimo cliente deve entrar no final da fila e, portanto,
ser o ltimo a sair (ou ser atendido) na fila
Portanto:
No podemos retirar qualquer cliente da fila!
Apenas clientes que esto na frente da fila
Propriedades
Propriedades de uma fila:
Tipos de filas
Neste estgio, estaremos trabalhando com trs
tipos de filas: seqenciais, encadeadas e circulares
Seqencial: neste TAD, os elementos da fila so
armazenados em endereos seqenciais. Materializada
na forma de um vetor (arranjo ou matriz).
v[ ]
preciso
preciso controlar
controlar
oo incio
incio ee oo final
final da
da
fila.
fila. Note
Note os
os campos
campos
frente
frente ee fim.
fim.
Como
Como poderamos
poderamos
adaptar
adaptar uma
uma lista
lista
seqencial
seqencial uma
uma
fila?
fila?
Fila Vazia
...
Frente= 0 e Fim= -1
Insere A
...
Frente= 0 e Fim= 0
Insere B
...
Frente= 0 e Fim= 1
Insere C
...
Frente= 0 e Fim= 2
Retira
...
Frente= 1 e Fim= 2
Tipos de filas
(Continuao.)
Encadeada: neste TAD, os elementos da fila so
elementos encadeados por ponteiros
TFilaEnc f*
12
09
Filas seqenciais
Pense um pouco...
O que voc acha que seria necessrio para
implementar uma biblioteca de um novo TAD que
representasse uma fila seqencial?
um vetor de elementos (tamanho pr-definido)
duas variveis que controlem a frente e o fim da fila
/*
/* estruturao
estruturao */
*/
typedef
typedef struct
struct fila {
int
int elementos[MAX];
elementos[MAX];
int
int frente;
frente;
int
int fim;
fim;
}TFila;
}TFila;
/*
/* filaseq.h
filaseq.h */
*/
void
void criarFila(TFila
criarFila(TFila *fila);
*fila);
int
int filaVazia(TFila
filaVazia(TFila *fila);
*fila);
int
int filaCheia(TFila
filaCheia(TFila *fila);
*fila);
int
int enfileirar(TFila
enfileirar(TFila *fila,
*fila, int
int dado);
dado);
int
int desenfileirar(TFila
desenfileirar(TFila *fila,
*fila, int
int *d);
*d);
void
void imprimir(TFila
imprimir(TFila *fila);
*fila);
Mas... h problemas!
Voc deve ter percebido que a parte ocupada do
vetor pode chegar ultima posio
Ou seja, a fila seqencial vai se deslocando da
esquerda (frente) para direita (fim) em cada retirada
?
Frente= 1 e Fim= 2
Insere E e F
Frente= 1 e Fim= 4
Retira C
Frente= 2 e Fim= 4
Insere G
Frente= 2 e Fim= 4
Fila
Mas... h problemas!
E agora?
Do jeito que est, pode-se chegar a uma situao
(absurda) em que a fila estar vazia, mas nenhum
elemento novo poder mais ser inserido!
Concluso: a representao seqencial, descrita
anteriormente, parece no ser muito boa!
10
Soluo
O que se quer reaproveitar as primeiras posies
livres do vetor sem implementar um re-arranjo
(trabalhoso) de todos os elementos a cada retirada
Para isso, pode-se incrementar as posies do vetor de
maneira circular
Ou seja, se o ltimo elemento da fila ocupar a ltima
posio do vetor, inserimos os novos elementos a partir
do incio do vetor!
Graficamente:
Insere G
Frente= 2 e Fim= 0
11
Filas encadeadas
O que fazer quando o nmero mximo de elementos
na fila no conhecido?
Devemos implementar a fila usando uma estrutura de
dados dinmica (com alocao dinmica)
dinmica
Podemos empregar os conceitos vistos nas listas
simplesmente (ou duplamente) encadeadas
13
Cabea
03
Acesso
Acesso direto
direto ao
ao
primeiro
primeiro nodo
nodo;;
Acesso
Acesso direto
direto ao
ao
ltimo
ltimo nodo
nodo;;
Informao
Informao sobre
sobre oo
tamanho
tamanho da
da lista
lista..
100
110
120
14
Algoritmos em C
O que dever ser feito pelo aluno:
Escolha e instalao do ambiente a ser trabalhado no
laboratrio
Modelagem deste TAD (dados e operaes)
Implementao dos algoritmos de operaes bsicas
vistos em sala de aula na linguagem C
Utilizao das regras de modelagem vistas no mdulo
anterior (criao de bibliotecas) e modularizao
Implantao de cdigo legvel e bem documentado
Nomes de variveis condizentes com o problema
Prtica de laboratrio
15