?? 1.c
字號(hào):
#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;//標(biāo)志是否為葉子節(jié)點(diǎn)
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("葉子節(jié)點(diǎn)%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");//建立數(shù)據(jù)文件
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("輸入要查找的數(shù)\n");
scanf("%d",&n);
printf("按那種方法查找:1或2\n");//1表示順序查找,2表示隨即查找
scanf("%d",&means);
search(n,means);
while(1)
{
printf("是否繼續(xù)查詢\n");
scanf("%d",&m);
if(m==0)
break;
else
{
printf("輸入要查找的數(shù)\n");
scanf("%d",&n);
printf("按那種方法查找:1或2\n");
scanf("%d",&means);
search(n,means);
}
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -