コード例 #1
0
ファイル: b-tree.c プロジェクト: lilianglaoding/codeprimer
int InsertBTree(NodeType **t, datatype x)
{
    int s, finished = false;
    NodeType *stptr;
    datatype kx = x;
    Result *rs;
    rs = SearchBTree(*t, kx);
    if (!rs.tag)
    {
	stptr = NULL;
	while (rs.pt && !finished)
	{
	    Insert(rs.pt, rs.i, kx, elemptr, stptr);
	    if (rs.pt->keynum < m)
		finished = true;
	    else
	    {
		s = (m + 1) / 2;
		kx = rs.pt->key[s];
		elemptr = rs.pt->eptr[s];
		stptr = split(rs.pt, s);
		rs.pt = rs.pt->parent;
		if (rs.pt)
		    rs.i = SearchBTree(rs.pt, kx);
	    }
	}
    }
    if (!finished)
    {
	NewRoot(*t, stptr, kx, elemptr);
	finished = true;
    }
}
コード例 #2
0
ファイル: exp9-7.cpp プロジェクト: Mandarava/Data-Structure
void main()
{
	BTNode *t=NULL;
	Result s;
	int j,n=10;
	KeyType a[]={4,9,0,1,8,6,3,5,2,7},k;
	m=3;								//3阶B-树
	Max=m-1;Min=(m-1)/2;
	printf("创建一棵%d阶B-树:\n",m);
	for (j=0;j<n;j++)					//创建一棵3阶B-树t	
	{
		s=SearchBTree(t,a[j]);
		if (s.tag==0)
			InsertBTree(t,a[j],s.pt,s.i);	
		printf("   第%d步,插入%d: ",j+1,a[j]);DispBTree(t);printf("\n");
	}
	printf("  结果B-树: ");DispBTree(t);printf("\n");
	printf("删除操作:\n");
	k=8;
	DeleteBTree(k,t);
	printf("  删除%d: ",k);
	printf("B-树: ");DispBTree(t);printf("\n");
	k=1;
	DeleteBTree(k,t);
	printf("  删除%d: ",k);
	printf("B-树: ");DispBTree(t);printf("\n");
}
コード例 #3
0
ファイル: btree.cpp プロジェクト: Mandarava/Data-Structure
void main()
{
	BTNode *t=NULL;
	Result s;
	int j,n=20;
	KeyType a[]={1,2,6,7,11,4,8,13,10,5,17,9,16,20,3,12,14,18,19,15},k;
	m=5;								/*例10.7*/
	Max=m-1;Min=(m-1)/2;
	printf("\n");
	printf(" 创建一棵%d阶B-树:\n",m);
	for (j=0;j<n;j++)					/*创建一棵5阶B-树t*/	
	{
		s=SearchBTree(t,a[j]);
		if (s.tag==0)
			InsertBTree(t,a[j],s.pt,s.i);	
		printf("   第%d步,插入%d: ",j+1,a[j]);DispBTree(t);printf("\n");
	}
	printf(" 删除操作:\n");				/*例10.8*/
	k=8;
	DeleteBTree(k,t);
	printf("   删除%d: ",k);
	DispBTree(t);printf("\n");
	k=16;
	DeleteBTree(k,t);
	printf("   删除%d: ",k);
	DispBTree(t);printf("\n");
	k=15;
	DeleteBTree(k,t);
	printf("   删除%d: ",k);
	DispBTree(t);printf("\n");
	k=4;
	DeleteBTree(k,t);
	printf("   删除%d: ",k);
	DispBTree(t);printf("\n\n");
}
コード例 #4
0
ファイル: container.cpp プロジェクト: djbelyak/OOPLab-Tree
BTree* SearchBTree(BTree* Root, char* data) // поиск элемента
{
	if(Root != NULL) // если узел не пуст
	{
		int compare = strcmp(data, Root->data); // сравнить ключи

		if(compare == 0)
			return Root; // элемент найден

		if(compare < 0) // если искомый ключ меньше ключа текущего узла
			return SearchBTree(Root->left, data); // продолжаем поиск в левом поддереве

		if(compare > 0)// если искомый ключ больше ключа текущего узла
			return SearchBTree(Root->left, data); // продолжаем поиск в правом поддереве
	}

	return NULL; // элемент не найден
}
コード例 #5
0
int main()
{
    int r[N]= {22,16,41,58,8,11,12,16,17,22,23,31,41,52,58,59,61};
    BTree T=NULL;
    Result s;
    int i;
    for(i=0; i<N; i++)
    {
        s=SearchBTree(T,r[i]);
        if(!s.tag)
            InsertBTree(&T,r[i],s.pt,s.i);
    }
    printf("\n请输入待查找记录的关键字: ");
    scanf("%d",&i);
    s=SearchBTree(T,i);
    if(s.tag)
        print(*(s.pt),s.i);
    else
        printf("没找到");
    printf("\n");

    return 0;
}