?? delete.h
字號:
Status DeleteBTree(BTree &T,int k,BTree q,int i)
{
BTree p,f,pl,pr;//f為q的雙親,pl,pr分別為q的左右兄弟。
int l;
p=q;
if(q->ptr[i]!=NULL)
{
p=q->ptr[i];
while(p->ptr[0]!=NULL)
p=p->ptr[0];
q->key[i]=p->key[1];
q->recptr[i]=p->recptr[1];
if(p->keynum>=s)
{
for(int j=1;j<p->keynum-1;j++)
{
p->key[j]=p->key[j+1];
p->recptr[j]=p->recptr[j+1];
}
p->key[p->keynum]=0;
p->recptr[p->keynum]=NULL;
p->keynum-=1;
return OK;
}
else
{
f=p->parent;
pr=f->ptr[1];
if(p->keynum>=s)
change1(p,f,pr,1);//p:要刪除的關(guān)鍵字所以的結(jié)點,pr:q的右兄弟,f:q與p的雙親,i:x在p中的位置
else
change(q,f,1);
}
}
else //q是非終端葉子結(jié)點
{
if(q->keynum>=s||q==T)
{
for(int j=i;j<q->keynum-1;j++)
{
q->key[j]=q->key[j+1];
q->recptr[j]=q->recptr[j+1];
}
q->key[p->keynum]=0;
q->recptr[p->keynum]=NULL;
q->keynum-=1;
return OK;
}
else
{
f=q->parent;
l=Search(f,q->key[0]);
pl=f->ptr[l-1];
pr=f->ptr[l+1];
if(pr!=NULL&&pr->keynum>=s)
change1(q,f,pr,i);
else
if(pl!=NULL&&pl->keynum>=s)
change2(q,f,pl,i);
else
change(q,f,i);
}
}
return OK;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -