顺序表应用6:有序顺序表查询
Time Limit: 7MS Memory limit: 700K
题目描述
顺序表内按照由小到大的次序存放着n个互不相同的整数(1<=n<=20000),任意输入一个整数,判断该整数在顺序表中是否存在。如果在顺序表中存在该整数,输出其在表中的序号;否则输出“No Found!"。
输入
第一行输入整数n,表示顺序表的元素个数;
第二行依次输入n个各不相同的有序整数,代表表里的元素;
第三行输入整数t,代表要查询的次数;
第四行依次输入t个整数,代表每次要查询的数值。
输出
输出t行,代表t次查询的结果,如果找到在本行输出该元素在表中的位置,否则本行输出No Found!
示例输入
10
1 22 33 55 63 70 74 79 80 87
4
55 10 2 87
示例输出
4
No Found!
No Found!
10
提示
#include <stdio.h>
#include <stdlib.h>
#define maxsize 20000
typedef int elemlist;
typedef struct
{
elemlist *elem;
int length;
int listsize;
}Sq;
int Sqinlist(Sq &L)
{
L.elem=(elemlist *)malloc(maxsize*sizeof(elemlist));
if(!L.elem)
return -1;
L.length=0;
L.listsize=maxsize;
return 0;
}
void listsert(Sq &L,int n)
{
int i;
for(i=0;i<n;i++)
scanf("%d",&L.elem[i]);
L.length=n;
}
int searchlist(Sq &L,elemlist r,elemlist l,elemlist m)
{
elemlist mid=(l+r)/2;
while(l>=r)
{
if(L.elem[mid]>m)
return searchlist(L,r,mid-1,m);
else if(L.elem[mid]<m)
return searchlist(L,mid+1,l,m);
else
{
printf("%d\n",mid+1);
return 0;
}
}
printf("No Found!\n");
}
int main()
{
int n,t;
Sq L;
elemlist m;
scanf("%d",&n);
Sqinlist(L);
listsert(L,n);
scanf("%d",&t);
while(t--)
{
scanf("%d",&m);
searchlist(L,0,L.length,m);
}
}
标签:顺序,return,int,Sq,mid,查询,有序,elemlist,elem From: https://blog.51cto.com/u_15879559/5868795