数据结构-查找(C语言)——分块查找代码篇

分块查找

#include
#define MAXSIZE 1024
typedef struct{
     
	int key;//int为关键字key的数据类型
	char data;//其他数据 
}SeqList;//顺序表类型

typedef struct{
     
	int key;//用于存放块的最大关键字
	int link;//用于指向块的起始位置 
}IdxType;//索引表元素类型

int IdxSearch(IdxType I[],int m,SeqList R[],int k)
{
     
	//索引表I长度为m(数组元素分别为I[0]~I[m-1]
	int low=0,high=m-1,mid,i,j;
	while(low<=high)//在索引表中折半查找
	{
     
		mid=(low+high)/2;
		if(I[mid].key>=k)
		   high=mid-1;
		else
		   low=mid+1; 
   }
   if(low<m){
     
   	    //在索引表中找到所求的块,接下来在顺序表(即数组R)中顺序查找 
      	i=I[low+1].link-1;//i为该块最后一个数组元素的下标
		j=I[low].link;//j为该块第一个元素的下标
		while(R[i].key!=k&&i>=j)
		   i--;
		if(i>=j)
		   return i;//当i>=j时查找成功返回i值 
   }
   return -1;//查找失败 
 }
int main()
{
     
	int i;
	IdxType I[4]={
     18,0,38,4,71,9,90,11};//建立索引表I
	SeqList R[16]={
     18,' ',6,' ',10,' ',11,' ',21,' ',31,' ',20,' ',38,' ',
	19,' ',60,' ',71,' ',75,' ',88,' ',73,' ',79,' ',90,' '};
	//建立顺序表R
	i=IdxSearch(I,4,R,38);//查找关键字为38的记录在顺序表中的存放位置
	if(i>-1)
	    printf("Site of 38 is %d\n",i);
	else
	    printf("NO find 38!\n");
	i=IdxSearch(I,4,R,26);//查找关键字为26的记录在顺序表中的存放位置
	if(i>-1)
	    printf("Site of 26 is %d\n",i);
	else
	    printf("NO find 26!\n"); 
}

数据结构-查找(C语言)——分块查找代码篇_第1张图片

你可能感兴趣的:(C语言,数据结构,stu,数据结构,c语言)