Cronograma

• 26/09 – Fila
• 29/09 – Exercícios
• 20/10 – Correção de Exercícios
• 24/10 – Pilha e exercícios
• 27/10 – Prova da Vânia
• 31/10 – Correção de Exercícios e Revisão
• 03/11 – Prova 2
• 07/11 – Árvore
• 17/10 – Árvore
• 21/11 – Árvore
• 24/11 – Correção de Exercícios
• 28/11 – Revisão
• 01/12 – Prova 3
• 08/12 – Prova Final

Estruturas de Dados 3

Filas
Prof. Mailson de Queiroz Proença
2º semestre de 2016

Filas .

.: impressora). Onde as filas são usadas? • Fila de processos do sistema operacional.. • Acesso a recursos compartilhados (Ex. • Tratamento de teclas acionadas no teclado do computador. • Programação paralela.Filas • E na computação..

Filas – implementação • Implementa norma: FIFO (first-in. primeiro a sair. onde é obedecido a ordem de chegada. first-out) – primeiro a entrar. • Podemos comparar uma estrutura em Fila como uma fila qualquer. .

. • A consulta retorna os elementos em ordem de inserção (ordem de chegada). • O elemento a ser retirado é sempre removido do início da Fila (o que chegou há mais tempo na fila) • Os elementos são removidos sempre na extremidade inicial.Filas – implementação • Uma FILA pode ser implementada usando uma LISTA DINÂMICA com as seguintes características: • O novo elemento sempre é inserido no final da Fila (ordem de chegada) • Os elementos são inseridos sempre na extremidade final.

onde cada célula armazena: • Elementos (informações). e • Uma ligação com a próxima célula elemento Célula inicio fim A B C D .Filas • Uma Fila é formada por um próxima conjunto de células.

Ponteiros que indicam o endereço celula *fim. Elemento da Célula celula *proxima.  Endereçamento de uma Fila de inteiros em C++ celula *inicio. na Memória de Início e de Final da Lista .Filas – Implementação em C Definição de uma Célula para uma Fila de inteiros em C++ struct celula{ int elem. Referência para a Célula seguinte }.

Filas • Principais operações com uma estrutura de Fila: • Criar uma Fila • Verificar se a fila está vazia • Inserir um elemento (Célula) • Listar o próximo elemento da Fila (primeira Célula) • Listar todos elementos • Remover Célula • Esvaziar a fila .

} .Criar uma Fila inici fi o m void CriaFila(){ inicio = NULL. fim = NULL.

Inserir uma Célula em uma Fila  Se a Fila estiver vazia: Nova inici célula 9 fi o m  Caso contrário. insere a célula no final da Fila: inicio 3 1 2 fi m 9 Nova célula .

Inserir uma Célula em uma Fila celula *InsereCelula(int val) { celula *nova = new celula. if (inicio == NULL){ inicio = nova. } . nova->elem = val. } else { fim->proxima = nova. nova->proxima = NULL. fim = nova. } return inicio. fim = nova.

inicio = InsereCelula(45). //ponteiro para a 1ª Célula da Fila celula *fim. //cria e inicia lista vazia inicio = InsereCelula(23). //ponteiro para a Última Célula da Fila int main(){ CriaFila().. celula *inicio.Testando a Fila.. } . return 0.

: " << inicio->elem. } } . }else{ cout <<"Fila vazia!".Listar próximo elemento de uma Fila inicio 5 8 1 fi m Primeira Célula da Fila void ProximaCelula(){ if (inicio != NULL){//se lista não for vazia cout << "\nProx.

} }else{ cout <<"Fila vazia!". while(aux != NULL){ cout << "\nNum = " << aux->elem. aux = aux->proxima. } } .Listar todos os elementos de uma Fila inici 5 8 1 fi o m void ImprimeFila(){ if (inicio != NULL){//se fila não estiver vazia celula * aux = inicio.

Remover uma Célula de uma Fila  Se a Fila não for vazia. exclui o primeiro Célula da Fila: 1 9 2 inici o .

// Libera memória } return inicio.Remover uma Célula de uma Fila celula *RemoveCelula() { if (inicio == NULL){ cout << "\nFila vazia. inicio = inicio->proxima.". cout << "\nNo removido: %d" << aux- >elem. } else{ celula * aux = inicio. } . delete aux.

return 0... inicio = RemoveNo(). int main(){ inicio = RemoveNo().Testando a Fila. } .

Esvaziar uma Fila  Para esvaziar uma Fila em C é necessário eliminar cada célula da Fila: inicio 2 4 5 7 .

} inicio = NULL. aux = inicio. fim = NULL. delete aux.Esvaziar uma Fila celula *EsvaziaFila(){ if (inicio == NULL){ cout << "\nFila vazia!". } return NULL. } else{ celula *aux = inicio.//Ponteiro que percorre a Fila while(aux != NULL){ // Percorre a Fila inicio = inicio->proxima. } .

. ImprimeFila(). return 0. inicio = EsvaziaFila().. int main(){ // Esvazia a Fila..Testando a Fila. } ..

. o usuário deve ser capaz de realizar as seguintes tarefas: a) Listar o número de aviões aguardando na fila de decolagem. b) Autorizar a decolagem do primeiro avião da fila.Exercícios 1 . c) Adicionar um avião à fila de espera. d) Listar todos os aviões na fila de espera.Escreva um programa que simule o controle de uma pista de decolagem de aviões em um aeroporto. Neste programa. e) Listar as características do primeiro avião da fila. •)Considere que os aviões possuem um nome e um número inteiro como identificador. Adicione outras características conforme achar necessário.

Exercícios 2 . . Insira n elementos com prioridades diversas na fila. maior a prioridade do elemento.Escreva um programa que tenha uma fila cujos elementos possuem um campo inteiro representando sua prioridade. Quanto maior o valor deste campo.

ou seja. Tendo em vista o ditado "Os últimos serão os primeiros".Exercícios 3 .Suponha que tenhamos um programa em C++ que armazene uma fila de pessoas (nomes das pessoas). quem estava no início da fila vai passar a estar no final e quem estava no final passará a estar no início. crie uma função que pegue a fila e a inverta. .