-
Notifications
You must be signed in to change notification settings - Fork 0
/
TDAtablaHashCerrado.h
113 lines (85 loc) · 2.15 KB
/
TDAtablaHashCerrado.h
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
#include <stdio.h>
#include <stdlib.h>
/*--------------- estructura de datos -----------------*/
struct TDAtablaHash{
int capacidad;
int* lista;
}typedef tablaHash;
/*--------------- operaciones de creación -----------------*/
//Crear tabla
tablaHash * crearTablaHash(int capacidad){
tablaHash* tabla = (tablaHash*) malloc(sizeof(tablaHash));
tabla->capacidad = capacidad;
tabla->lista = (int*)malloc(sizeof(int) * 7);
for (int i = 0; i < capacidad; ++i){
tabla->lista[i] = -1;
}
return tabla;
}
/*--------------- funcion hash -----------------*/
// Función hash
int funcionHash(int llave){
return((4 * llave + 3) % 7);
}
/*--------------- operaciones de inserción y eliminacion -----------------*/
//Insertar en Bucket
void insertarHashCerrado(tablaHash* tabla, int dato){
int indice = funcionHash(dato);
if(esBucketVacio(tabla,indice)){
tabla->lista[indice] = dato;
}else{
int i = 0;
while(!esBucketVacio(tabla, i)){
i++;
}
tabla->lista[indice] = dato;
}
mostrarTablaHashCerrado(tabla);
}
//Eliminar en tabla
void eliminarHashCerrado(tablaHash* tabla, int dato){
int indice = funcionHash(dato);
if(tabla->lista[indice] == dato){
tabla->lista[indice] = -1;
}else{
int i = 0;
while(tabla->lista[i] != dato){
i++;
}
tabla->lista[i] = -1;
}
mostrarTablaHashCerrado(tabla);
return;
}
/*--------------- operaciones de consulta -----------------*/
//mostrar tabla
void mostrarTablaHashCerrado(tablaHash* tabla){
for (int i = 0; i < tabla->capacidad; ++i){
printf("%d. %d\n", i+1, tabla->lista[i]);
} printf("\n");
return;
}
/*--------------- operaciones auxiliares -----------------*/
//verificador
int esBucketVacio(tablaHash* tabla, int indice){
if(tabla->lista[indice] == -1){
return 1;
}else{
return 0;
}
}
/*--------------- operaciones de posicion -----------------*/
//buscar en tabla
void buscarHashCerrado(tablaHash* tabla, int dato){
int indice = funcionHash(dato);
if(tabla->lista[indice] == dato){
printf("El dato se encuentra en la posicion %d", indice);
}else{
int i = 0;
while(tabla->lista[i] != dato){
i++;
}
printf("El dato se encuentra en la posicion %d", i);
}
return;
}