B-树结点的分裂 不是很理解 求指点
程序代码:
/* 将结点q分裂成两个结点,前一半保留,后一半移入新生结点ap */ void split(BTree *q,BTree *ap) { int i,s=(m+1)/2; s? *ap=(BTree)malloc(sizeof(BTNode));//生产新生结点ap (*ap)->node[0].ptr=(*q)->node[s].ptr;//后一半移入ap for(i=s+1;i<=m;i++) i=s+1?????????????????? { (*ap)->node[i-s]=(*q)->node[i]; ????????? if((*ap)->node[i-s].ptr) ???????? (*ap)->node[i-s].ptr->parent=*ap; } (*ap)->keynum=m-s; ?? (*ap)->parent=(*q)->parent; (*q)->keynum=s-1;//q的前一半保留 修改keynum } /* 生成含信息(T,r,ap)的新的根结点*T 原T和ap为子树指针 */ void NewRoot(BTree *T,Record *r,BTree ap) { BTree p; p=(BTree)malloc(sizeof(BTNode)); p->node[0].ptr=*T; *T=p; if((*T)->node[0].ptr) (*T)->node[0].ptr->parent=*T; (*T)->parent=NULL; ??????? (*T)->keynum=1; (*T)->node[1].key=r->key; ????????? (*T)->node[1].reptr=r; ???????? (*T)->node[1].ptr=ap; ????、、 if((*T)->node[1].ptr) (*T)->node[1].ptr->parent=*T; ???????? }m表示阶数 i表示在结点中的序号