-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTR4_536281.c
More file actions
45 lines (36 loc) · 1.22 KB
/
TR4_536281.c
File metadata and controls
45 lines (36 loc) · 1.22 KB
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
#include "ordvetor.h"
//Função para criar o vetor ordenado com tamanho n e função de comparação
VETORORD* VETORD_create(int n, COMP* compara) {
VETORORD* vector = malloc(sizeof(VETORORD));
vector->elems = malloc(n * sizeof(void*));
vector->N = n;
vector->P = 0;
vector->comparador = compara;
return vector;
}
//Função para adicionar um elemento ao vetor ordenado (se houver espaço) e ordenar o vetor de acordo com a função de comparação
void VETORD_add(VETORORD* vector, void* newElement) {
if (vector->P < vector->N) {
int position = vector->P, index;
for (index = 0; index < vector->P; index++) {
if (vector->comparador(vector->elems[index], newElement) == -1) {
position = index;
break;
}
}
for (index = vector->P; index > position; index--) {
vector->elems[index] = vector->elems[index - 1];
}
vector->elems[position] = newElement;
vector->P++;
}
}
//Função para remover o menor elemento do vetor ordenado e reordenar o vetor de acordo com a função de comparação
void* VETORD_remove(VETORORD* vector) {
void* minimum = vector->elems[0];
for (int index = 0; index < vector->P - 1; index++) {
vector->elems[index] = vector->elems[index + 1];
}
vector->P--;
return minimum;
}