以上为题目:
此题目可将顺序表遍历查询有没有相同的元素,对算法的时间限制较大,可用二分查找
以下为代码:
#include <stdio.h>
#include <stdlib.h>
#define List_init_size 20000
typedef int element;
typedef struct
{
element *elem;
int length;
int listsize;
}Sqlist;
int Initlist(Sqlist *l)
{
l->elem = (element *)malloc(List_init_size*sizeof(element));
if(!l->elem) return -1;
l->length = 0;
l->listsize = List_init_size;
return 0;
}
int Createlist(Sqlist *l,int m)
{
int i;
for(i=0;i<m;i++)
{
scanf("%d",&l->elem[i]);
}
l->length = m;
return 0;
}
int Searchlist(Sqlist *l,int s,int t,int key)
{
int mid = (s+t) /2;
if(l->elem[mid] == key)
{
printf("%d\n",mid+1);
return 0;
}
else
{
while(s<=t)
{
if(l->elem[mid] > key)
return Searchlist(l,s,mid-1,key);
else
return Searchlist(l,mid+1,t,key);
}
if(s>t)
printf("NO FOUND!\n");
}
return 0;
}
int main()
{
int n,t,key;
Sqlist L,*q;
scanf("%d",&n);
Initlist(&L);
Createlist(&L,n);
q=&L;
n=q->length-1;
scanf("%d",&t);
while(t--)
{
scanf("%d",&key);
Searchlist(&L,0,n,key);
}
return 0;
}