-
Notifications
You must be signed in to change notification settings - Fork 0
/
TablaDispersaEnlazada.java
86 lines (75 loc) · 1.95 KB
/
TablaDispersaEnlazada.java
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
public class TablaDispersaEnlazada {
static final int M = 101;
private Elemento[] tabla;
private int numElementos;
static final Double R = 0.6180334;
static int dispersarClave(int clave){
int claveSinDecimales;
clave*= R;
claveSinDecimales = (int) (Math.round(clave));
clave-= claveSinDecimales;
clave*= M;
claveSinDecimales = (int) (Math.round(clave));
return claveSinDecimales;
}
public TablaDispersaEnlazada() {
tabla = new Elemento[M];
for (int k = 0; k < M; k++) {
tabla[k] = null;
numElementos = 0;
}
}
public void insertar(TipoSocio tipoSocio) {
int posicion;
Elemento nuevo;
posicion = dispersarClave(tipoSocio.getCodigo());
nuevo = new Elemento(tipoSocio);
nuevo.siguiente = tabla[posicion];
tabla[posicion] = nuevo;
numElementos++;
}
boolean conforme(TipoSocio a){
return true;
};
public void eliminar(int codigo){
int posicion;
posicion = dispersarClave(codigo);
// no está vacía
if (tabla[posicion] != null)
{
Elemento anterior, actual;
anterior = null;
actual = tabla[posicion];
while ((actual.siguiente != null) &&
actual.getSocio().getCodigo() != codigo)
{
anterior = actual;
actual = actual.siguiente;
}
if (actual.getSocio().getCodigo() != codigo)
System.out.println("No se encuentra en la tabla el socio "+ codigo);
else if (conforme (actual.getSocio())) //se retira el nodo
{
if (anterior == null) // primer nodo
tabla[posicion] = actual.siguiente;
} else {
anterior.siguiente = actual.siguiente;
actual = null;
numElementos--;
}
}
}
public Elemento buscar(int codigo) {
Elemento p = null;
int posicion;
posicion = dispersarClave(codigo);
if (tabla[posicion] != null){
p = tabla[posicion];
while ((p.siguiente != null) && p.socio.codigo != codigo)
p = p.siguiente;
if (p.socio.codigo != codigo)
p = null;
}
return p;
}
}