Next: Inserción
Up: Implantación de un B
Previous: Recorrido Secuencial
La eliminación en un B+ se realiza únicamente a nivel de nodo
hoja, si la llave que se desea eliminar está en una rama, se conserva
y se sigue hasta encontrar la llave y su respectivo registro en una hoja,
esta operación se realiza con la función search_leaf explicada
anteriormente. Una vez localizado el elemento (nodo hoja y posición)
se llama a la rutina erase_register que libera la parte de memoria
direccionada por el apuntador del arreglo de registros y recorre (o compacta)
los elementos que se encuentran a la derecha del registro eliminado y
decrementa el número de llaves en la hoja.
/* Borra el elemento "pos" de la hoja n */
/* [MAYO-97] */
/* AMILCAR MENESES VIVEROS */
void erase_register(node *n, int pos)
{
int i;
free(n->ap[pos]);
for (i=pos; i< n->nKeys; i++) {
n->ap[i] = n->ap[i+1];
n->ak[i] = n->ak[i+1];
}
n->ap[i] = NULL;
n->ak[i] = BKeyNull;
(n->nKeys)--;
}
Amilcar Meneses
2003-09-08