-
Notifications
You must be signed in to change notification settings - Fork 0
/
filas_insercao_de_elementos_circular.c
63 lines (59 loc) · 1.17 KB
/
filas_insercao_de_elementos_circular.c
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
// iagorrr ;)
#include <stdio.h>
#include <stdlib.h>
typedef struct fila {
int *dados;
int N, p, u;
} fila;
int enfileira(fila *f, int x) {// [p, u[
if(f->N == 0) {
// fprintf(stderr, "fila vazia.\n");
f->N = 4;
f->dados = (int*) malloc(sizeof(int)*f->N);
if(!f->dados) return 0;
f->p = 0;
f->u = 0;
}
else if((f->u)%f->N == f->p) {// fila cheia.
int *temp = (int*) malloc(sizeof(int)*2*f->N);
if(!temp) return 0;
int i = 0;
int j = f->p;
do {
temp[i] = f->dados[j];
i++;
j = (j+1) % f->N;
}while( j != f->u);
free(f->dados);
f->dados = temp;
f->p = 0;
f->u = f->N;
f->N *= 2;
}
// insere o elemento.
f->dados[f->u] = x;
f->u = (f->u+1)%f->N;
return 1;
}
//
// void dbg(fila *f) {
// printf("p: %d\n", f->p);
// printf("u: %d\n", f->u);
// printf("N: %d\n", f->N);
// int i = f->p;
// do {
// printf("[%d] ", f->dados[i]);
// i = (i+1)%(f->N);
// }while(i != f->u);
// printf("\n");
// }
// int main() {
// fila *f = (fila*) (malloc(sizeof(fila)));
// f->N=0;
// while(1) {
// int i;
// scanf("%d", &i);
// enfileira(f, i);
// dbg(f);
// }
// }