您的位置:首页 > 其它

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

2017-09-27 14:54 197 查看


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


Problem Description

顺序表内按照由小到大的次序存放着n个互不相同的整数,任意输入一个整数,判断该整数在顺序表中是否存在。如果在顺序表中存在该整数,输出其在表中的序号;否则输出“No Found!"。


Input

 第一行输入整数n (1 <= n <= 100000),表示顺序表的元素个数;

第二行依次输入n个各不相同的有序非负整数,代表表里的元素;

第三行输入整数t (1 <= t <= 100000),代表要查询的次数;

第四行依次输入t个非负整数,代表每次要查询的数值。
保证所有输入的数都在 int 范围内。


Output

 输出t行,代表t次查询的结果,如果找到在本行输出该元素在表中的位置,否则本行输出No Found!


Example Input

10
1 22 33 55 63 70 74 79 80 87
4
55 10 2 87



Example Output

4
No Found!
No Found!
10

-----------------------------------------------------------------------------------------------------

#include<stdio.h>
#include<stdlib.h>
#define maxsize 1000000
typedef int element;
typedef struct{
element *elem;
int length, listsize;
}Sqlist;
void initList(Sqlist &L){
L.elem = new int[maxsize];
L.length = 0;
L.listsize = maxsize;
}
void inputData(Sqlist &L, int len){
L.length = len;
for(int i = 0; i < len; i++){
scanf("%d", &L.elem[i]);
}
}
int find(Sqlist &L, int i, int j, int x){
int m = i+(j-i)/2;
if(i <= j){
if(L.elem[m] == x)return m+1;
if(L.elem[m] > x)return find(L, i, m-1, x);
else return find(L, m+1, j, x);
}
else return -1;
}
void outputData(Sqlist &L){
int i;
for(i=0;i<L.length-1;i++){
printf("%d ",L.elem[i]);
}
printf("%d\n",L.elem[L.length-1]);
}
int main(){
int n, t, x, y;
Sqlist L;
scanf("%d", &n);
initList(L);
inputData(L, n);
scanf("%d", &t);
while(t--){
scanf("%d", &x);
y = find(L, 0, n-1, x);
if(y == -1){
printf("No Found!\n");
}
else printf("%d\n", y);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: