A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Estrutura de Dados Prof. André Cypriano M. Costa

Apresentações semelhantes


Apresentação em tema: "Estrutura de Dados Prof. André Cypriano M. Costa"— Transcrição da apresentação:

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

4

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 λ

9

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

17

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

26

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


Carregar ppt "Estrutura de Dados Prof. André Cypriano M. Costa"

Apresentações semelhantes


Anúncios Google