Você está na página 1de 24

Cronograma

26/09 Fila
29/09 Exerccios
20/10 Correo de Exerccios
24/10 Pilha e exerccios
27/10 Prova da Vnia
31/10 Correo de Exerccios e Reviso
03/11 Prova 2
07/11 rvore
17/10 rvore
21/11 rvore
24/11 Correo de Exerccios
28/11 Reviso
01/12 Prova 3
08/12 Prova Final
Estruturas de Dados 3

Filas
Prof. Mailson de Queiroz Proena
2 semestre de 2016
Filas
Filas

E na computao... Onde as filas so usadas?


Fila de processos do sistema operacional;
Acesso a recursos compartilhados (Ex.: impressora);
Tratamento de teclas acionadas no teclado do computador;
Programao paralela.
Filas implementao

Implementa norma: FIFO (first-in, first-out) primeiro a


entrar, primeiro a sair.
Podemos comparar uma estrutura em Fila como uma fila
qualquer, onde obedecido a ordem de chegada.
Filas implementao

Uma FILA pode ser implementada usando uma LISTA


DINMICA com as seguintes caractersticas:
O novo elemento sempre inserido no final da Fila
(ordem de chegada)
Os elementos so inseridos sempre na extremidade final.
O elemento a ser retirado sempre removido do incio
da Fila (o que chegou h mais tempo na fila)
Os elementos so removidos sempre na extremidade inicial.
A consulta retorna os elementos em ordem de insero
(ordem de chegada).
Filas

Uma Fila formada por um prxima


conjunto de clulas, onde cada
clula armazena:
Elementos (informaes); e
Uma ligao com a prxima clula elemento Clula

inicio fim

A B C D
Filas Implementao em C
Definio de uma Clula para uma Fila de inteiros
em C++
struct celula{
int elem; Elemento da Clula
celula *proxima; Referncia para a
Clula seguinte
};

Endereamento de uma Fila de inteiros em C++


celula *inicio; Ponteiros que indicam o endereo
celula *fim; na Memria de Incio e de Final da
Lista
Filas

Principais operaes com uma estrutura de Fila:


Criar uma Fila
Verificar se a fila est vazia
Inserir um elemento (Clula)
Listar o prximo elemento da Fila (primeira Clula)
Listar todos elementos
Remover Clula
Esvaziar a fila
Criar uma Fila

inici fi
o m
void CriaFila(){
inicio = NULL;
fim = NULL;
}
Inserir uma Clula em uma Fila

Se a Fila estiver vazia:


Nova
inici clula
9 fi
o m

Caso contrrio, insere a clula no final da Fila:


inicio 3 1 2 fi
m
9
Nova
clula
Inserir uma Clula em uma Fila
celula *InsereCelula(int val) {
celula *nova = new celula;
nova->elem = val;
nova->proxima = NULL;
if (inicio == NULL){
inicio = nova;
fim = nova;
} else {
fim->proxima = nova;
fim = nova;
}
return inicio;
}
Testando a Fila...
celula *inicio; //ponteiro para a 1 Clula da Fila

celula *fim; //ponteiro para a ltima Clula da Fila

int main(){
CriaFila(); //cria e inicia lista vazia
inicio = InsereCelula(23);
inicio = InsereCelula(45);
return 0;
}
Listar prximo elemento de uma Fila
inicio 5 8 1 fi
m

Primeira Clula da Fila


void ProximaCelula(){
if (inicio != NULL){//se lista no for vazia
cout << "\nProx.: " << inicio->elem;
}else{
cout <<"Fila vazia!";
}
}
Listar todos os elementos de uma Fila

inici 5 8 1 fi
o m
void ImprimeFila(){
if (inicio != NULL){//se fila no estiver
vazia
celula * aux = inicio;
while(aux != NULL){
cout << "\nNum = " << aux->elem;
aux = aux->proxima;
}
}else{
cout <<"Fila vazia!";
}
}
Remover uma Clula de uma Fila

Se a Fila no for vazia, exclui o primeiro Clula


da Fila:

1 9 2

inici
o
Remover uma Clula de uma Fila
celula *RemoveCelula() {
if (inicio == NULL){
cout << "\nFila vazia.";
}
else{
celula * aux = inicio;
cout << "\nNo removido: %d" << aux-
>elem;
inicio = inicio->proxima;
delete aux; // Libera memria
}
return inicio;
}
Testando a Fila...
int main(){
inicio = RemoveNo();
inicio = RemoveNo();
return 0;
}
Esvaziar uma Fila
Para esvaziar uma Fila em C necessrio eliminar cada
clula da Fila:

inicio 2 4 5 7
Esvaziar uma Fila
celula *EsvaziaFila(){
if (inicio == NULL){
cout << "\nFila vazia!";
} else{
celula *aux = inicio;//Ponteiro que percorre a Fila
while(aux != NULL){ // Percorre a Fila
inicio = inicio->proxima;
delete aux;
aux = inicio;
}
inicio = NULL;
fim = NULL;
}
return NULL;
}
Testando a Fila...
int main(){
// Esvazia a Fila...
inicio = EsvaziaFila();
ImprimeFila();
return 0;
}
Exerccios
1 - Escreva um programa que simule o controle de uma pista de
decolagem de avies em um aeroporto. Neste programa, o usurio
deve ser capaz de realizar as seguintes tarefas:
a) Listar o nmero de avies aguardando na fila de decolagem;
b) Autorizar a decolagem do primeiro avio da fila;
c) Adicionar um avio fila de espera;
d) Listar todos os avies na fila de espera;
e) Listar as caractersticas do primeiro avio da fila.
)Considere que os avies possuem um nome e um nmero inteiro
como identificador. Adicione outras caractersticas conforme achar
necessrio.
Exerccios

2 - Escreva um programa que tenha uma fila cujos


elementos possuem um campo inteiro representando sua
prioridade. Quanto maior o valor deste campo, maior a
prioridade do elemento. Insira n elementos com
prioridades diversas na fila.
Exerccios

3 - Suponha que tenhamos um programa em C++ que


armazene uma fila de pessoas (nomes das pessoas).
Tendo em vista o ditado "Os ltimos sero os primeiros",
crie uma funo que pegue a fila e a inverta, ou seja,
quem estava no incio da fila vai passar a estar no final e
quem estava no final passar a estar no incio.