⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 delete.h

📁 一个B-树实现与编辑
💻 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:要删除的关键字所以的结点,pr:q的右兄弟,f:q与p的双亲,i:x在p中的位置
			else
				change(q,f,1);
		}
	}
	else     //q是非终端叶子结点
	{
		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 + -