codigo fuente del programa de arbol b
DESCRIPTION
CODIGO FUENTETRANSCRIPT
CODIGO FUENTE DEL PROGRAMA DE ARBOL B
#include #define MAX 100#include //BIBLIOTECAS#include using namespace std;
class node; struct p_nodo//ESTRUCTURA PRINCIPAL {node *next;//SIGUIENTE DE NODOint key;//VALOR DEL NODO };
class node//ARRAY DE NODOS//CLASE NODO {public:int noofkeys; p_nodo data[MAX];node *father;node *first;node();//FUNCIONES DE LA CLASEint leafnode();void insertinanode(p_nodo x);p_nodo splitanode(p_nodo x); node *nextindex(int x); void display(); };
void node::display()//FUNCION MOSTRAR {int i;//DECLARA VARIABLE I;coutdata[i]; T->noofkeys--; } else { for(i=centre,j=0;idata[j]=data[i]; //SI EL DATO ES MAYOR QUE EL CENTRO SUBE A PADRE T->noofkeys=noofkeys-centre; noofkeys=noofkeys-T->noofkeys; insertinanode(x); T->father=father; myp_nodo.key=T->data[0].key; myp_nodo.next=T;//INSERTA EL PADRE EN UNA NUEVO NODO Y RETORNA EL PADRE for(i=1;inoofkeys;i++)T->data[i-1]=T->data[i]; T->noofkeys--; } return(myp_nodo); }
node::node(){ for(int i=0;iinsertinanode(myp_nodo);//ROOT INSERTA EN EL ARBOL} else{ p=root;//SINO ROOT ES EL PADRE while(!(p->leafnode())) p=p->nextindex(x);
if(p->noofkeysinsertinanode(myp_nodo);
else{ myp_nodo=p->splitanode(myp_nodo); while(1) { if(p==root)//SI P ES IGUAL A NULL { q=new node;//Q NUEVO NODO q->data[0]=myp_nodo;//DATO DE Q q->first=root;//Q PRIMERO IGUAL A ROOT q->father=NULL;//PADRE IGUAL A NULL q->noofkeys=1;//NUMERO DE DATOS EN EL NODO root=q;//ROOT IGUAL A Q q->first->father=q; q->data[0].next->father=q; return;//RECORRIDO DE Q
} else {p=p->father;if(p->noofkeys < mkeys) {p->insertinanode(myp_nodo);return; } elsemyp_nodo=p->splitanode(myp_nodo); }
} }} }
int main() { int n,i,x,op;//DECLARACION DE VARIABLES node *p;//DECLARACION DE NODO coutn;//DATO A PEDIR btree b(n);//DECLARACION DEL OBJETO DE LA CLASE BTREE do{cout