Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouAna Luiza Espírito Santo Castilho Alterado mais de 8 anos atrás
1
Estrutura de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br acostaprofessor@gmail.com
2
A fila é uma outra estrutura de dados muito utilizada em computação. É uma analogia natural com o conceito de fila que usamos no nosso dia a dia: os elementos saem da fila seguindo a mesma ordem de entrada.
3
Fila é uma estrutura de dados do tipo “Primeiro a Entrar, Primeiro a Sair”. First In, First Out (FIFO) ou Last In, Last Out (LILO) Uma fila é um conjunto de elementos a partir do qual podem-se eliminar elementos numa extremidade (chamada início da fila) e no qual podem-se inserir elementos na outra extremidade (chamada final da fila). Fila x Pilha
5
Fila de Impressão Impressora em rede compartilhada por várias máquinas Que documento será impresso primeiro? A estratégia mais simples é tratar todas as requisições com a mesma prioridade. Imprimir os documentos na ordem em que foram submetidos – o primeiro submetido é o primeiro a ser impresso. Processos do Sistema Operacional Fila dos processos prontos para execução Fila dos processos aguardando I/O
6
novaFila (newQueue) Produz uma fila vazia filaVazia (emptyQueue) Testa se a fila está vazia primeiro (first) Retorna o primeiro elemento da fila inserir (push) Insere um elemento no final da fila remover (pop) Remove o primeiro elemento da fila
7
Sintaxe Dado φ uma fila (queue): novaFila() → φ vazio filaVazia(fila φ) → boolean push(fila φ, tipo λ) → φ pop(fila φ) → φ primeiro(fila φ) → tipo
8
Semântica Dado φ uma fila (queue): filaVazia(novaFila()) → filaVazia(push(fila φ, tipo λ)) → pop(push(fila φ, tipo λ) → pop(novaFila()) → primeiro(push(fila φ, tipo λ) → primeiro(novaFila()) → true false φ null λ
10
#define MAX 10 // definição da estrutura de dados fila typedef struct fila { int tam;// numero de elementos da fila int vet[MAX];// vetor que vai armazenar os elementos } Fila; // declaração de uma variável do tipo Fila Fila fila;
11
int filaVazia(Fila fila) { // retorna 0 se a condição for Falsa. Caso contrário, // retorna um valor diferente de 0. return (fila.tam == 0); }
12
Fila push(Fila fila, int elem) { // verifica se a fila está cheia if(fila.tam == MAX) { // capacidade maxima atingida printf(“Fila cheia.\n"); exit(1); // aborta o programa } fila.vet[fila.tam] = elem; // insere o elemento fila.tam++; // atualiza a quantidade de elementos return fila; }
13
int primeiro(Fila fila) { // verifica se a fila está vazia if(filaVazia(fila)) return -1; // retorna um código de erro // senão o elemento do topo da fila else return fila.vet[0]; }
14
Fila pop(Fila fila) { int i; if(filaVazia(fila)) // verifica se a fila está vazia { printf(“A fila esta vazia!\n”); return fila; // se sim, retorna a referência da fila vazia } // desloca os elementos da fila para frente for(i = 0; i < fila.tam && i != MAX - 1; i++) fila.vet[i] = fila.vet[i + 1];...
15
// verifica se o índice do vetor foi até a última posição do vetor if(i == MAX – 1) fila.vet[MAX – 1] = -1; //atribui -1 à última posição // decrementa a quantidade de elementos da fila fila.tam--; return fila; }
16
Implemente, em C, o TAD Fila usando vetor. Na sua implementação deve constar um menu que permite ao usuário Inserir um novo elemento na fila Consultar o primeiro elemento da fila Remover um elemento da fila Fique à vontade para implementar qualquer outra funcionalidade que desejar Por exemplo, uma função que imprime todos os elementos da fila
18
// definindo a estrutura de dados pilha typedef struct fila { int valor; struct fila *prox; } Fila; // declarando uma pilha Fila *fila;
19
Fila* novaFila() { return NULL; } Exemplo: // declarando uma variável do tipo fila e inicializando-a Fila *fila = novaFila();
20
int filaVazia(Fila* fila) { // retorna verdadeiro se a fila estiver vazia, caso // contrário retorna falso return (fila == NULL); }
21
Fila* push(Fila* fila, int elem) { // criando um backup para o inicio da fila Fila *temp = fila; // alocando espaço para mais um elemento da fila Fila *novo = (Fila*)malloc(sizeof(Fila)); // preenchendo os campos do novo elemento da fila novo -> valor = elem; novo -> prox = NULL;...
22
// verifica se a fila está vazia if(filaVazia(fila)) // se estiver o primeiro elemento é o novo elemento return novo; // caso contrário, percorre a fila até o último elemento while(temp -> prox != NULL) temp = temp -> prox; // liga o último elemento ao novo elemento temp -> prox = novo; return fila; }
23
Fila* primeiro(Fila* fila) { // verifica se a fila está vazia if(filaVazia(fila)) return NULL; // retorna o primeiro da fila else return fila; }
24
Fila* pop(Fila* fila) { // verifica se a fila está vazia if(filaVazia(fila)) return NULL; // cria uma referência para o segundo elemento da fila Fila *temp = fila -> prox; // remove o primeiro elemento free(fila); // retorna o novo elemento referenciado return temp; }
25
Implemente, em C, o TAD Fila usando ponteiros. Na sua implementação deve constar um menu que permite ao usuário Inserir um novo elemento na fila Consultar o primeiro elemento da fila Remover um elemento da fila Fique à vontade para implementar qualquer outra funcionalidade que desejar Por exemplo, uma função que imprime todos os elementos da fila
27
// estrutura de um nó da fila typedef struct noFila { int valor; struct noFila *prox; } NoFila; // estrutura que gerencia a // fila typedef struct fila { NoFila* prim; NoFila* ult; } Fila;
28
Fila* novaFila() { // cria uma estrutura gerenciadora Fila* novaFila = (Fila*)malloc(sizeof(Fila)); // inicializa seus ponteiros novaFila prim = NULL; novaFila ult = NULL; return novaFila; }
29
int filaVazia(Fila* fila) { // retorna verdadeiro se a fila estiver vazia, caso // contrário retorna falso return (fila prim == NULL); }
30
Fila* primeiro(Fila* fila) { // verifica se a fila está vazia if(filaVazia(pilha) return NULL; // retorna a referência para o primeiro elemento da fila return fila prim; }
31
Fila* push(Fila* fila, int elem) { // alocando espaço para mais um elemento da fila NoFila* novo = (NoFila*)malloc(sizeof(NoFila)); // preenchendo os campos do novo elemento da fila novo valor = elem; novo prox = NULL; // verifica se a fila está vazia if(filaVazia(fila)) // insere o primeiro elemento da fila fila prim = fila ult = novo;...
32
else { // inserindo o último elemento da fila fila ult prox = novo; fila ult = novo; } return fila; }
33
Fila* pop(Fila* fila) { // verifica se a fila está vazia if(filaVazia(fila)) return NULL; // verifica se existe apenas um elemento else if(fila prim == fila ult) { // remove o elemento e atualiza as referencias free(fila prim); fila prim = fila ult = NULL; }
34
// existe mais de um elemento na fila else { // cria uma referência para o segundo elemento da fila NoFila* temp = fila prim prox; // remove o primeiro elemento e atualiza as referencias free(fila prim); fila prim = temp; } return fila; }
35
Implemente a estrutura de dados Fila Melhorada usando a linguagem C. Na sua implementação deve constar um menu que permite ao usuário Inserir um novo elemento na fila Consultar o primeiro elemento da pilha Remover um elemento da fila Fique à vontade para implementar qualquer outra funcionalidade que desejar Por exemplo, uma função que imprime todos os elementos da fila
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.