-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFila em C
154 lines (143 loc) · 3.4 KB
/
Fila em 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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
/* Definições deste código inseridas no READ ME */
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
//Programado por Matheus Garrido em 2017
// Fila com capacidade de armazenamento de até 200 números
#define TAMANHO 200
//Declaração das funções para permitir o método principal, o "main", fique próximo ao início do documento
typedef struct fila Fila;
Fila* criar();
void inserir (Fila* f);
float remover(Fila* f, int pos);
int buscar(Fila* f, int b);
void listar(Fila* f);
//Estrutura para armazenar os dados de uma fila
struct fila {
//Quantidade de valores armazenadas na fila
int n;
//Informação que será armazenada [posição da informação, até 200 números]
float x[TAMANHO];
};
void main(int argc, char *argv[]) {
setlocale(LC_ALL, "portuguese");
//Criando a fila
Fila* f = criar();
while(1==1){
// Menu principal
printf("1 - Inserir\n2 - Buscar\n3 - Buscar e remover\n4 - Listar\n5 - Sair\n");
int op, lb;
float b;
// Interação com o menu
printf("\nOpção: ");
scanf("%d", &op);
switch(op){
case 1:
//Inserção de dados na fila
inserir(f);
break;
case 2:
// Busca de uma informação na fila
printf("Valor de busca: ");
scanf("%f", &b);
buscar(f, b);
break;
case 3:
// Busca de uma informação na fila para deletar
printf("Valor de busca: ");
scanf("%f", &b);
// A busca retorna a posição do valor
lb = buscar(f, b);
// Caso o valor esteja na fila (0-199 == 1º-200º), será excluído
if (lb >= 0) {
f->x[0] = remover(f, lb);
if (f->n != 0){
printf("Valor excluído.\n");
}
listar(f);
}
break;
case 4:
//Função para imprimir toda a fila
listar(f);
break;
case 5:
//Fim do programa
printf("Programa finalizado.\n");
exit(0);
default:
printf("Opção inválida.\n");
}
system("pause");
system("cls");
}
}
/* Implementação de códigos às funções criadas no início do programa
Função para a criação da estrutura da fila */
Fila* criar(){
Fila* f = (Fila*) malloc(sizeof(Fila));
f->n = 0;
return f;
}
// Inserção de valores na fila
void inserir (Fila* f){
// Verificação de quantidade de dados armazenados
if (f->n == TAMANHO) {
printf("Capacidade da fila estourou.\n");
return;
}
// Inserção
printf("Valor: ");
scanf("%f", &f->x[f->n]);
f->n++;
printf("Valor inserido.\n");
}
// Remoção de valores na fila
float remover(Fila* f, int pos){
// Verificação de quantidade de dados armazenados
if (f->n==0) {
printf("Fila vazia.\n");
return f->x[0];
}
// Remoção
int i;
for (i=pos; i<f->n; i++){
f->x[i] = f->x[i+1];
}
f->x[i+1] = 0;
f->n--;
return f->x[0];
}
// Busca de uma primeiro aparição de um valor especificado na fila
int buscar(Fila* f, int b){
int i;
// Verificação de quantidade de dados armazenados
if (f->n==0){
printf("Fila vazia.\n");
return -1;
}
// Busca pelo valor
for (i=0; i < f->n; i++){
if (b == f->x[i]){
printf("Posição: %dº\n", (i+1));
return i;
}
}
// Resposta negativa na busca
printf("Valor não encontrado.\n");
return -1;
}
//Função para imprimir toda a fila
void listar(Fila* f){
// Verificação de quantidade de dados armazenados
if (f->n==0){
printf("Fila vazia.\n");
return;
}
// Impressão de valores e suas posições
int i;
printf("Fila:\n");
for (i=0; i < f->n; i++){
printf("%dº: %.0f\n", (i+1), f->x[i]);
}
}