分块查找算法程序

#include<stdio.h>

#define maxsize 100//预定义最大的数据域空间

typedef int datatype;//假设数据类型为整型

typedef struct

{

    datatype data[maxsize];//此处假设数据元素只包含一个整型的关键字域

    int len;//线性表长度

}seqlist;//预定义的顺序表类型

typedef struct//索引表结点类型

{

    datatype key;

    int address;

}indexnode;

//分块查找关键字为key的纪录,索引表index[0…m-1]

int indexseqsearch(seqlist l,indexnode index[],int m,datatype key)

{

    int i=0,j;

    while(i<m&&key>index[i].key)

    i++;

    if(i>=m)

    return -1;

    else//在顺序表中检索

    {

        if(i==m-1)

        j=l.len-1;

        else

        j=index[i+1].address-1;//j初始指向本块最后一个结点

        while(j>=index[i].address&&key!=l.data[j])

        j–;//从后向前逐个查找

        if(j<index[i].address)

        return -1;

        else

        return j;

    }

}

int main()

{

    int i,k,m;

    datatype key;

    seqlist l;

    indexnode index[10];

    printf(“输入线性表的长度:”);

    scanf(“%d”,&l.len);

    printf(“输入线性表的结点内容:\n”);

    for(i=0;i<l.len;i++)

    scanf(“%d”,&l.data[i]);

    printf(“输入索引表的长度:”);

    scanf(“%d”,&m);

    printf(“输入索引表的内容(起始地址,最大关键字):\n”);

    for(i=0;i<m;i++)

    scanf(“%d %d”,&index[i].address,&index[i].key);

    do

    {

        printf(“请输入要查找的关键字(-1退出):”);

        scanf(“%d”,&key);

        if(key==-1) break;

        k=indexseqsearch(l,index,m,key);

        if(k==-1)

        printf(“查找失败!\n”);

        else

        printf(“\n在第%d个位置,查找成功!\n”,k);

    }while(k!=-1);

}

    原文作者:查找算法
    原文地址: https://blog.csdn.net/qq_38452951/article/details/80625766
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞