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

📄 1.c

📁 B树
💻 C
字号:
#include<stdio.h>
#define LEN 1024
#define Lenindex 100
typedef struct
{
	int block;
	int quality;
}Date;
typedef struct
{
	int keynum;
	int keyblock;
}Key;
typedef struct
{
	int flag;//标志是否为叶子节点
	int block;
	int quality;
}Index;

void search(int searchword,int means)
{
    FILE *f,*fp;
	int i,datanum,findword;
	Index bindex;		
	Key keyword[3];
	Date bdata;
	f=fopen("index.txt","r");
	if(f==NULL)
	   printf("cannot open\n");
	if(means==1)
	{
		
		datanum=7;
		while(1)
		{
		     fseek(f,(datanum-1)*Lenindex,0);
		     fread(&bindex,sizeof(Index),1,f);
		     printf(" %d-->",bindex.block);
             if(bindex.flag==0)
			 {
		        fread(keyword,sizeof(Key),bindex.quality,f);
		         for(i=0;i<bindex.quality;i++)
			       if(searchword<=keyword[i].keynum)
				       break;
	             datanum=keyword[i].keyblock;
			 }
		     else
			 {  
			   fread(keyword,sizeof(Key),bindex.quality,f);
		       for(i=0;i<bindex.quality;i++)
			       if(searchword<=keyword[i].keynum)
				       break;
	                 datanum=keyword[i].keyblock;
					 break;
				  
			 }
		}
			       
		

	}
	else if(means==2)
	{
		datanum=1;
		while(1)
		{
			fseek(f,(datanum-1)*Lenindex,0);
			fread(&bindex,sizeof(Index),1,f);
			printf(" %d-->",bindex.block);
			fread(keyword,sizeof(Key),bindex.quality,f);
			for(i=0;i<bindex.quality;i++)
				if(searchword<=keyword[i].keynum)
				{
					datanum=keyword[i].keyblock;
					break;
				}
				if(i==bindex.quality)
					datanum=datanum+1;
				else
					break;

		}
	}
	
		
     	fp=fopen("file.txt","r");
		if(fp==NULL)
			printf("cannot open\n");
		fseek(fp,(datanum-1)*LEN,0);
		fread(&bdata,sizeof(Date),1,fp);
		printf("叶子节点%d\n",bdata.block);
		for(i=0;i<bdata.quality;i++)
		{
			fread(&findword,sizeof(int),1,fp);
			printf("%d  \n",findword);
			if(searchword==findword)
			{
				printf("the word is in %d  block,%d line\n",bdata.block,i+1);
			    break;
			}
		}
		if(i==bdata.quality+1)
			printf("cannot find\n");

}






main()
{
	Key key[3];
	Date date;
	Index index;
	int keyword,means;
	int i,j,n,m;
	FILE *f;
	f=fopen("file.txt","w");//建立数据文件
	if(f==NULL)
		printf("cannot open\n");
	for(i=0;i<10;i++)
	{
		date.block=i+1;
		date.quality=50;
		fwrite(&date,sizeof(Date),1,f);
		//printf("%d,%d\n",date.block,date.quality);
		for(j=0;j<50;j++)
		{
			keyword=i*50+1+j;
			fwrite(&keyword,sizeof(keyword),1,f);
			//printf("%d\n",keyword);
		}
		fseek(f,(i+1)*LEN,0);
	}
	fclose(f);
/*	f=fopen("file.txt","r");
	for(i=0;i<10;i++)
	{
		fseek(f,i*LEN,0);
		fread(&date,sizeof(Date),1,f);
        printf("%d,%d\n",date.block,date.quality);
		
	}*/

    //建立索引文件
	f=fopen("index.txt","w");
	if(f==NULL)
		printf("cannot open\n");
	//建立第一,二块
	for(i=0;i<2;i++)
	{
		index.block=i+1;
		index.flag=1;
		index.quality=3;
		fwrite(&index,sizeof(Index),1,f);
		for(j=0;j<index.quality;j++)
		{
			key[j].keyblock=3*i+j+1;
			key[j].keynum=(3*i+j+1)*50;
			fwrite(&key[j],sizeof(Key),1,f);
		}
	
		fseek(f,(i+1)*Lenindex,0);
	}
	//建立三四索引块
	for(i=0;i<2;i++)
	{
		index.block=i+3;
		index.flag=1;
		index.quality=2;
		fwrite(&index,sizeof(Index),1,f);
		for(j=0;j<index.quality;j++)
		{
			key[j].keyblock=6+2*i+j+1;
			key[j].keynum=(6+2*i+j+1)*50;
            fwrite(&key[j],sizeof(Key),1,f);
		}
		
        fseek(f,(i+3)*Lenindex,0);
	}
	//建立五索引块
		index.block=5;
		index.flag=0;
		index.quality=2;
        fwrite(&index,sizeof(Index),1,f);
		for(j=0;j<index.quality;j++)
		{
		   key[j].keyblock=j+1;
		   key[j].keynum=150*(j+1);
		  fwrite(&key[j],sizeof(Key),1,f);
		}
		fseek(f,5*Lenindex,0);
		//建立第六块索引
        index.block=6;
		index.flag=0;
		index.quality=2;
        fwrite(&index,sizeof(Index),1,f);
		for(j=0;j<index.quality;j++)
		{
		   key[j].keyblock=j+3;
		   key[j].keynum=100*(j+4);
		  fwrite(&key[j],sizeof(Key),1,f);
		}
		fseek(f,6*Lenindex,0);
		//建立第七块索引
        index.block=7;
		index.flag=0;
		index.quality=2;
		fwrite(&index,sizeof(Index),1,f);
        for(j=0;j<index.quality;j++)
		{
		   key[j].keyblock=j+5;
		   key[j].keynum=300+j*200;
		  fwrite(&key[j],sizeof(Key),1,f);
		}
		fclose(f);
		printf("输入要查找的数\n");
		scanf("%d",&n);
		printf("按那种方法查找:1或2\n");//1表示顺序查找,2表示随即查找
	    scanf("%d",&means);
		search(n,means);
		while(1)
		{
		   printf("是否继续查询\n");
		   scanf("%d",&m);
		    if(m==0)
		 	    break;
		    else
			{
			   printf("输入要查找的数\n");
		       scanf("%d",&n);
		       printf("按那种方法查找:1或2\n");
	            scanf("%d",&means);
		        search(n,means);
			}
		}
}
		



	
		
			



		


		

			

		


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -