La dispersión abierta, también llamada encadenamiento separado,
consiste en tener una lista de los elementos que se dispersan en el mismo valor
de la tabla. Suponiendo una tabla de tamaño 10 de números enteros y con la
función de dispersión: dispersión(x) = x MOD 10, nos quedaría una tabla
de dispersión abierta como la de la figura:
TYPE
posicion =POINTER TO nodo;
nodo = RECORD
elem : TipoElemento;
sig : posicion;
END;
TablaDisp = ARRAY INDICE OF posicion;
PROCEDURE IniciaTabla (VAR D: TablaDisp);
VAR
i : integer;
BEGIN
FOR i:=0 TO MAX_T-1 DO
D[i]:= NIL;
END;
FUNCTION Buscar (llave: TipoElemento; D: TablaDisp): posicion;
VAR
res, p: posicion;
BEGIN
p := D[hashing(llave)];
res:= NIL;
WHILE p <> NIL DO
IF p^.elemento = llave THEN BEGIN
res:= p; BREAK;
END;
p := p^.sig;
END;
Buscar:= res;
END;
PROCEDURE Insertar (llave:TipoElemento; VAR D: TablaDisp);
VAR
h: INTEGER;
pos, lista : posicion;
nuevo : posicion;
BEGIN
pos := Buscar (llave, D);
IF pos = NIL THEN BEGIN (* no encontrado *)
h:= hashing(llave);
NEW (nuevo);
nuevo^.elem := llave;
nuevo^.sig := D[h];
D[h]:= nuevo;
END;
END;
| Tema
anterior |