En la implantación que presentamos se incluye un archivo de cabecera auxiliar tipos.h, donde se definen la estructura del registro que manejará el B+ y el tipo de campo llave que utilizará, además de otras definiciones que resulten convenientes para trabajar la estructura de los registros en el árbol4.
/* tipos.h */ /* Archivo donde se define la estructura */ /* y llave que maneja el arbol B+ */ /* [ABRIL-97] */ /* AMILCAR MENESES VIVEROS */ typedef int Bkey; /* Tipo de llave */ /* Estructura del registro que se maneja en el arbol B+ */ typedef struct s_register { /* Variable tipo registro */ int edad; char nombre[30]; } Bregister; /* Llave que se maneja en el arbol B+ */ #define Fkey %d /* Formato de la llave */ #define FFkey "%d" /* Formato de la llave */ #define BKeyNull 0 /* Valor nulo de la llave */ #define KeyNode(p) (p.edad) /* Campo que se utiliza como llave */ #define PKeyNode(p) ((p)->edad) /* Campo llave desde un apuntador */
Debido al tipo de organización de los datos que se debe realizar con
el B+, la estructura de un nodo de estos árboles deben tener un
arreglo de n apuntadores a los subárboles ``hijo'' (donde n es el
orden del árbol); un arreglo de n-1 llaves; un arreglo de n-1
apuntadores a los registros del nodo ``hoja''; un contador para el
número de llaves que tenga el nodo; un apuntador al nodo padre; y un
apuntador al nodo ``hoja'' subsecuente. De esta forma, la implantación
de la estructura node queda de la siguiente forma:
typedef struct _node { int nKeys; /* Numero de hojas */ Bkey ak[ORDER-1]; /* Arreglo de llaves */ Bregister *ap[ORDER-1]; /* Arreglo de apuntadores a los registros */ struct _node *an[ORDER]; /* Arreglo de apuntadores a los hijos */ struct _node *nxt; /* Apuntador a la hoja mas proxima */ struct _node *up; /* Apuntador al nodo padre */ } node;