顺序表应用6:有序顺序表查询
Time Limit: 7ms Memory limit: 700K 有疑问?点这里^_^
题目描述
顺序表内按照由小到大的次序存放着n个互不相同的整数(1<=n<=20000),任意输入一个整数,判断该整数在顺序表中是否存在。如果在顺序表中存在该整数,输出其在表中的序号;否则输出“No Found!"。
输入
第一行输入整数n,表示顺序表的元素个数;
第二行依次输入n个各不相同的有序整数,代表表里的元素;
第三行输入整数t,代表要查询的次数;
第四行依次输入t个整数,代表每次要查询的数值。
第二行依次输入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<string.h>
-
- #include<stdlib.h>
- int *creat_list(int size)
- {
- int *q;
- q=(int *)malloc((size)*sizeof(int ));
-
- return q;
-
- }
-
- void destory_list(int *q)
- {
- free(q);
- }
- int bin_search(int *p,int len,int h)
- {
-
- int l=0,r=len-1;
- int mid;
-
- while(l<=r)
- {
-
- mid=(l+r)/2;
-
- if(p[mid]==h)
-
- return mid+1;
-
- else if(p[mid]<h)
-
- l=mid+1;
-
- else
-
-
- r=mid-1;
- }
-
- return 0;
-
- }
-
- void search_list(int *t,int *p,int lent,int lenp)
- {
- int j,k;
-
- for(j=0;j<lent;j++)
- {
- k=bin_search(p,lenp,t[j]);
- if(k>0)
- printf("%d\n",k);
- else
- printf("No Found!\n");
- }
- }
-
- int main()
-
- {
-
- int m,i,j,*p,k,*t;
-
- scanf("%d",&m);
- p=creat_list(m);
- for(j=0;j<m;j++)
- scanf("%d",&p[j]);
- scanf("%d",&k);
- t=creat_list(k);
- for(j=0;j<k;j++)
-
- scanf("%d",&t[j]);
-
- search_list(t,p,k,m);
- destory_list(t);
- destory_list(p);
- return 0;
-
- }