-
Notifications
You must be signed in to change notification settings - Fork 0
/
pruebas.c
executable file
·94 lines (82 loc) · 2.23 KB
/
pruebas.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
#include "heap.h"
int compara_numeros(void* _n1, void* _n2){
int* n1= _n1;
int* n2= _n2;
return (*n1)-(*n2);
}
void destruye_numero(void* elemento){
free(elemento);
}
/*
* Crea un heap minimal - inserta 8 valores desordenados - recorre el heap
* mostrando y extrayendo la raiz.
* Resultado esperado: Que imprima los valores por pantalla en forma creciente
*/
void probar_heap_elementos_estaticos(){
heap_t *heap = heap_crear(compara_numeros, NULL, MINIMAL);
if(!heap)
return;
int n1 = 1;
int n2 = 2;
int n3 = 3;
int n4 = 4;
int n5 = 5;
int n6 = 6;
int n7 = 7;
int n8 = 8;
heap_insertar(heap, &n8);
heap_insertar(heap, &n6);
heap_insertar(heap, &n3);
heap_insertar(heap, &n2);
heap_insertar(heap, &n1);
heap_insertar(heap, &n7);
heap_insertar(heap, &n4);
heap_insertar(heap, &n5);
size_t cantidad = heap_cantidad(heap);
for (size_t i = 0; i < cantidad; i++){
printf("%i-", *(int *)(heap_raiz(heap)));
heap_extraer_raiz(heap);
}
heap_destruir(heap);
printf("\n");
}
/*
* Reserva memoria para un int y la inicializa con el valor enviado
* Retorna la referencia de ese espacio de memoria
*/
int* crear_numero(int valor){
int* numero=malloc(sizeof(int));
if(numero)
*numero=valor;
return numero;
}
/*
* Crea un heap maximal - inserta 8 valores en forma creciente - recorre el heap
* mostrando y extrayendo la raiz.
* Resultado esperado: Que imprima los valores por pantalla en forma decreciente
*/
void probar_heap_elementos_dinamicos(){
heap_t* heap = heap_crear(compara_numeros, destruye_numero, MAXIMAL);
if(!heap)
return;
int estado=0; // insercion exitosa en el heap
int* elemento=NULL;
for(size_t i=0; i<8 && estado==0; i++){
elemento = crear_numero((int)i + 1);
estado = heap_insertar(heap, elemento);
}
if(estado==-1)//fallo insercion en heap
destruye_numero(elemento);
size_t cantidad = heap_cantidad(heap);
for (size_t i = 0; i < cantidad; i++){
printf("%i-", *(int *)(heap_raiz(heap)));
heap_extraer_raiz(heap);
}
heap_destruir(heap);
printf("\n");
}
int main(){
probar_heap_elementos_estaticos();
probar_heap_elementos_dinamicos();
return 0;
}