以上为题目:
此题目可将顺序表遍历查询有没有相同的元素,对算法的时间限制较大,可用二分查找
以下为代码:
<pre name="code" class="cpp">#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 Seachlist(Sqlist *L,int s,int t,int key)//查询算法,利用二分查找
{
int mid;
mid=(s+t)/2;
if(L->elem[mid]==key)//当查找到与之相同的元素返回
{//此处与函数的递归类似
printf("%d\n",mid+1);
return 0;
}
while(s<=t)//查询条件
{
if(L->elem[mid]>key) return Seachlist(L,s,mid-1,key);
else return Seachlist(L,mid+1,t,key);
}
if(s>t)printf("No Found!\n");//说明已经遍历而没有查询到元素
}
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);
Seachlist(&L,0,n,key);
}
return 0;
}
此处使用codeblocks编译