Filas encadeadas

267 visualizações

Publicada em

Aula de filas encadeadas

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
267
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
6
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Filas encadeadas

  1. 1. FilasEncadeadas Estruturas de Dados I Universidade Luterana do Brasil Prof Fabiana Lorenzi
  2. 2. Filas ● FIFO - First in first out ● O primeiro a entrar é o primeiro a sair ● Dentre os elementos que ainda permanecem no conjunto, o primeiro elemento a ser retirado é o primeiro que foi inserido ● Toda fila deve ter uma começo e um final (usar variáveis para indicar cada um deles) 2
  3. 3. Exemplosdefilas fila de impressão fila de banco 3
  4. 4. Operaçõespossíveisemumafila O acesso a uma fila é realizado somente de 2 formas: Enfileirar (inserir um novo elemento no final da fila). Desenfileirar (remover o elemento do início da fila). 4
  5. 5. Filasencadeadas Registro tfila inteiro dado registro tfila *próximo fim 5
  6. 6. FilasencadeadascomHeader Registro tfila inteiro dado registro tfila *próximo fim Registro header registro tfila *começo inteiro qtde registro tfila *final fim 6
  7. 7. Enfileiras-filasencadeadas Procedimento Enfileira (ref registro header *F; inteiro valor; ref inteiro sinal); inicio registro tfila *aux, *p aloca(p); se (p = nulo) entao sinal = 0 senao inicio p->dado = valor p->próximo = nulo aux = F->final F->final = p se (F->começo = nulo) {Se fila estiver vazia....} entao F->começo = p senao sinal = 1 aux->próximo = p; fim F->qtde++ fim 7
  8. 8. Enfileirarsemheader-emC void enfileirar(nodo **fila, int valor) { nodo *aux; nodo *p = (nodo *)malloc(sizeof(nodo)); p->dados = valor; p->proximo = NULL; if(*fila == NULL) { // Fila vazia *fila = p; } else { aux = *fila; while(aux->proximo != NULL) { aux = aux->proximo; } aux->proximo = p; } } 8
  9. 9. Desenfileirar-filasencadeadascom HeaderFuncao Desenfileira (ref registro header *F; ref inteiro sinal) inicio inteiro valor=0 registro tfila *aux se (F->comeco = nulo) entao sinal = 0 senao inicio aux = F->comeco valor = aux->dado F->comeco = aux->proximo se (aux = F->final) entao F->final = nulo libera(aux) F->qtde-- sinal = 1 fim retorna valor fim 9
  10. 10. Desenfeileirarsemheader-emC int desenfileirar(nodo **fila) { int valor; struct nodo *aux; aux = *fila; valor = aux->dados; *fila = aux->proximo; free(aux); return valor; } 10
  11. 11. Exercício 1) Escrever as seguintes subrotinas para a manipulação de uma fila encadeada (sem header): a) Procedimento para a inclusão de um novo na fila; b) Função para a remoção de um valor da fila c) Procedimento para exibir o conteúdo da fila; d) Função que retorna true se a fila estiver vazia; 2) Faça um programa em C que utilize as subrotinas criadas na questão anterior. 11
  12. 12. Exercício 3) Escreva um programa que recebe um número indeterminado de valores positivos e negativos (sai quando o usuário digitar 0) e: - se o valor digitado for negativo, remove o primeiro elemento da fila; - se o valor digitado já existir na fila, remover a primeira ocorrência dele na fila. 12

×