-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathfila.h
70 lines (57 loc) · 1.16 KB
/
fila.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <stdlib.h>
#include <stdio.h>
//typedef float Itemf;
//typedef char Itemf;
//typedef char* Itemf;
typedef int Itemf;
typedef struct fila {
int inicio;
int final;
int max;
int total;
Itemf* itens;
} *Fila;
Fila fila(int max) {
Fila F = (Fila) malloc(sizeof(struct fila));
F->inicio = F->final = F->total = 0;
F->itens = (Itemf*) malloc(sizeof(Itemf) * max);
F->max = max;
return F;
}
Itemf iniciof(Fila F) {
return F->itens[F->inicio];
}
Itemf finalf(Fila F) {
return F->itens[F->final];
}
int maxf(Fila F) {
return F->max;
}
int totalf(Fila F) {
return F->total;
}
int vaziaf(Fila F) {
return (F->total == 0);
}
int cheiaf(Fila F) {
return (F->total == F->max);
}
#define avanca(i) (i = (i + 1) % F->max)
void enfileira(Itemf i, Fila F) {
if (cheiaf(F)) { puts("Fila cheia!"); abort(); }
F->itens[F->final] = i;
avanca(F->final);
F->total++;
}
Itemf desenfileira(Fila F) {
if (vaziaf(F)) { puts("Fila vazia!"); abort(); }
Itemf i = F->itens[F->inicio];
avanca(F->inicio);
F->total--;
return i;
}
void destroif(Fila* G) {
free((*G)->itens);
free(*G);
*G = NULL;
}