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表示在结点中的序号




