DAS5102 - Filas - Exemplo em C
De Aulas
Links relacionados: DAS5102 Fundamentos da Estrutura da Informação
Observações
Aconselho fortemente a não olhar o código antes de tentar fazer por si mesmo, tentando entender a lógica das operações.
Arquivo fila.h
1#include <stdlib.h>
2#include <stdio.h>
3#include "fila.h"
4
5typedef struct no No;
6
7struct no
8{
9 int info;
10 No* prox;
11};
12
13struct fila
14{
15 int tamanho;
16 No* inicio;
17 No* cabeca;
18};
19
20Fila* fila_criar()
21{
22 Fila* f = malloc (sizeof(Fila));
23 f->tamanho = 0;
24 f->inicio = NULL;
25 f->cabeca = NULL;
26 return f;
27}
28
29void fila_inserir(Fila* f, int info)
30{
31 No* n = malloc (sizeof(No));
32 n->info = info;
33 n->prox = NULL;
34 if (f->tamanho == 0)
35 {
36 f->cabeca = n;
37 f->inicio = n;
38 }
39 else
40 {
41 n->prox = f->inicio;
42 f->inicio = n;
43 }
44 f->tamanho++;
45}
46
47int fila_verifica_cabeca(Fila* f)
48{
49 if (f->tamanho == 0)
50 {
51 return -1;
52 }
53 return f->cabeca->info;
54}
55
56int fila_vazia(Fila* f)
57{
58 return (f->tamanho == 0);
59}
60
61int fila_tamanho(Fila* f)
62{
63 return f->tamanho;
64}
65
66int fila_retira(Fila* f)
67{
68 if (f->tamanho == 0)
69 {
70 return -1;
71 }
72 if (f->tamanho == 1)
73 {
74 int aux = f->cabeca->info;
75 free (f->cabeca);
76 f->inicio = NULL;
77 f->cabeca = NULL;
78 f->tamanho = 0;
79 return aux;
80 }
81 No* local = f->inicio;
82 while (local->prox->prox != NULL)
83 {
84 local = local->prox;
85 }
86 int aux = f->cabeca->info;
87 free(f->cabeca);
88 f->cabeca = local;
89 f->cabeca->prox = NULL;
90 f->tamanho--;
91 return aux;
92}
93
94void fila_imprimir_tudo(Fila* f)
95{
96 No* local = f->inicio;
97 printf("[ ");
98 while (local != NULL)
99 {
100 printf("%d ", local->info);
101 local = local->prox;
102 }
103 printf(" ]\n");
104}
Arquivo fila.h
1#ifndef FILA_H_INCLUDED
2#define FILA_H_INCLUDED
3
4typedef struct fila Fila;
5
6Fila* fila_criar();
7void fila_inserir(Fila* f, int info);
8int fila_verifica_cabeca(Fila* f);
9int fila_vazia(Fila* f);
10int fila_tamanho(Fila* f);
11int fila_retira(Fila* f);
12void fila_imprimir_tudo(Fila* f);
13
14#endif // FILA_H_INCLUDED
Arquivo main.h
1#include <stdio.h>
2#include <stdlib.h>
3#include "fila.h"
4
5int main()
6{
7 Fila* f = fila_criar();
8 printf("Tamanho: %d\n", fila_tamanho(f));
9 fila_inserir(f, 5);
10 printf("Tamanho: %d\n", fila_tamanho(f));
11 fila_inserir(f, 6);
12 printf("Tamanho: %d\n", fila_tamanho(f));
13 fila_inserir(f, 7);
14 printf("Tamanho: %d\n", fila_tamanho(f));
15 fila_inserir(f, 8);
16 printf("Tamanho: %d\n", fila_tamanho(f));
17 fila_imprimir_tudo(f);
18 printf("Elemento: %d\n", fila_retira(f));
19 printf("Tamanho: %d\n", fila_tamanho(f));
20 printf("Elemento: %d\n", fila_retira(f));
21 printf("Tamanho: %d\n", fila_tamanho(f));
22 printf("Elemento: %d\n", fila_retira(f));
23 printf("Tamanho: %d\n", fila_tamanho(f));
24 printf("Elemento: %d\n", fila_retira(f));
25 printf("Tamanho: %d\n", fila_tamanho(f));
26 printf("Elemento: %d\n", fila_retira(f));
27 printf("Tamanho: %d\n", fila_tamanho(f));
28 fila_inserir(f, 3);
29 fila_inserir(f, 2);
30 fila_inserir(f, 1);
31 fila_imprimir_tudo(f);
32 return 0;
33}