-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfila_vetor.c
137 lines (113 loc) · 2.38 KB
/
fila_vetor.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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// Implementação de Fila com vetor
#include <stdio.h>
#include <stdlib.h>
#define MAX 50
struct fila
{
int n; // Número de elementos da fila
int ini; // Posição inicial
int vet[MAX];
};
typedef struct fila Fila;
// Cria uma Fila vazia
Fila* criaFila()
{
Fila* f = (Fila*) malloc(sizeof(Fila));
f->n = 0;
f->ini = 0;
return f;
}
// Insere um elemento no início da Fila
void insereFila(Fila* f, int v)
{
int fim;
if(f->n == MAX)
{
printf("A capacidade da fila estourou.\n");
exit(1);
}
fim = (f->ini + f->n) % MAX; // Estratégia para trabalhar com a fila "circular"
f->vet[fim] = v;
f->n++;
}
// Verifica se a Fila está vazia
int filaVazia(Fila* f)
{
if(f->n == 0)
{
return 1;
}
return 0;
}
// Retira um elemento do início da Fila
int retiraFila(Fila* f)
{
int v;
if(filaVazia(f) == 1)
{
printf("Fila vazia.\n");
exit(1);
}
v = f->vet[f->ini];
f->ini = (f->ini + 1) % MAX;
f->n--;
return v;
}
// Libera a memória alocada pela Fila
void liberaFila(Fila* f)
{
free(f);
}
// Imprime os elementos da Fila
void imprimeFila(Fila* f)
{
for(int i = 0; i < f->n; i++)
{
printf("%d ", f->vet[(f->ini + i) % MAX]);
}
printf("\n");
}
// Menu para testar as funções
void menu()
{
Fila* f;
int opcao;
int numero;
f = criaFila();
printf("Uma Fila vazia foi criada...\n\n");
do
{
printf("Digite o numero da opcao desejada\n");
printf("1- Inserir elemento na fila\n");
printf("2- Remover elemento do inicio da fila\n");
printf("3- Imprimir Fila\n");
printf("4- Sair\n");
scanf("%d", &opcao);
switch (opcao)
{
case 1:
printf("Digite um numero inteiro: ");
scanf("%d", &numero);
insereFila(f, numero);
printf("Elemento inserido com sucesso\n\n");
break;
case 2:
printf("O numero %d foi removido do inicio da Fila.\n", retiraFila(f));
break;
case 3:
imprimeFila(f);
break;
case 4:
printf("Programa encerrado.\n");
break;
default:
printf("Opcao invalida. Digite outro numero\n");
break;
}
} while (opcao != 4);
}
int main()
{
menu();
return 0;
}