您的位置:首页 > 其它

顺序表应用6:有序顺序表查询

2016-07-26 19:10 375 查看
用二分做,不然超时。

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

typedef int elemtype;

typedef struct

{

    elemtype *elem;

    int length;

    int listsize;

} sq;

int sqlist(sq *l)

{

    l->elem=(elemtype *)malloc(20000*sizeof(elemtype));

    if(!l->elem) return -1;

    l->length=0;

    l->listsize=20000;

    return 0;

}

int listinsert(sq *l,int k)

{

    int i;

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

    {

        scanf("%d",&l->elem[i]);

    }

    l->length=k;

    return 0;

}

int loclist(sq *l,int le,int ri,int k)

{

    int s=le,t=ri,zj;

    if(le<=ri)

    {

        zj=s+(t-s)/2;

        if(l->elem[zj]==k)

        {

            printf("%d\n",zj+1);

            return 0;

        }

        if(l->elem[zj]>k)

        {

            return loclist(l,s,zj-1,k);

        }

        else

        {

            return loclist(l,zj+1,t,k);

        }

    }

    if(s>t)

    {

        printf("No Found!\n");

    }

    return -1;

}

int main()

{

    sq l;

    int n,i,m,a,b;

    scanf("%d",&m);

    sqlist(&l);

    listinsert(&l,m);

    b=l.length-1;

    scanf("%d",&n);

    for(i=1; i<=n;i++)

     {

         scanf("%d",&a);

         loclist(&l,0,b,a);

     }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: