2020-03-03 23:07:30 来源:范文大全收藏下载本文
#include
#include/*清屏*/
#include
#define N 5
#define b 3
typedef struct
{
int key;/*关键项*/
float data;/*数据项*/
}table;
table R[N+1]; int K;
void Input()/*输入*/
{
float info;
int i,k;
for(i=0;i
{
printf(\"请输入第%d项的关键字:\\n\",i+1);
scanf(\"%d\",&k);
R[i].key=k;
printf(\"请输入第%d项的数据:\\n\",i+1);
scanf(\"%f\",&info);
R[i].data=info;
}
}
int SEQSEARCH(table R[],int K)/*在R中顺序查找关键字为K的结点,查找成功返回向量下标,失败返回-1*/
{
int i;
printf(\"请输入要查询的关键字: \");
scanf(\"%d\",&K);
R[N].key=K;/*设置高端监视哨*/
i=0;/*从表尾开始向前扫描*/
while(R[i].key!=K)
{
printf(\"查找过程第 %d 步查到的关键字为 %d \\n\",i+1,R[i].key);
i++;
}
{
printf(\"未查找到关键字为: %d 的数据\\n\",R[N].key);
return (-1);
}
else
{
printf(\"查找到的关键字数组下标为: %d数据为%.2f \\n\",i,R[i].data);
return i;
}
}/*SEQSEARCH*/
//二分查找
int BINSEARCH(table R[],int K)/*在有序表R中进行二分查找,成功返回结点的位置,失败是返回-1*/
{
int low,mid,high;
low=0;/*置查找区间的下界初值*/
high=N-1;/*置查找区间的上界初值*/
printf(\"请输入要查询的关键字: \");
scanf(\"%d\",&K);
while(low
{
mid=(low+high)/2;
if(K==R[mid].key)
{
printf(\"查找到的关键字数组下标为: %d数据为%.2f \\n\",mid,R[mid].data);return mid;/*查找成功返回*///////////输出?
}
if(K
high=mid-1;/*缩小查找区间为左子表*/
else
low=mid+1;/*缩小查找区间为左子表*/
}
printf(\"未查找到关键字为: %d 的数据%d\\n\",K,mid);
return (-1);/*查找失败*//////////提示失败?
}/*BINSEARCH*/
//分块查找
typedef struct/*索引表的结点类型*/
{
int key;
}IDtable;
IDtable ID[b];/*索引表*/
int BLKSEARCH(table R[],IDtable ID[],int K)/*分块查找,成功时函数值为关键字等于K的结点在R中的序号,失败时函数值为-1*/
{
int i,low1,low2,mid,high1,high2;
low1=0;/*置二分查找区间的下界初值*/
high1=b-1;/*置二分查找区间的上界初值*/
while(low1
{
mid=(low1+high1)/2;
if(K
high1=mid-1;
else
low1=mid+1;
}/*查找完毕,low1为找到的块号*/
if(low1b,则K大于R中所有的关键字*/
{
low2=ID[low1].addr;/*块起始地址*/
if(low1==b-1)/*求块末地址*/
high2=N-1;
else
high2=ID[low1+1].addr-1;
for(i=low2;i
if(R[i].key==K)/*查找成功*//////////输出?
return i;
}
return (-1);/*查找失败*/////////提示失败
}/*BLKSEARCH*/
void main()
{
Input();
SEQSEARCH(R,K);
BINSEARCH(R,K);
}BLKSEARCH(R,ID,K);
人人范文网 m.inrrp.com.cn 手机版