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

来源:互联网 发布:注册淘宝号 编辑:程序博客网 时间:2024/06/15 07:03

顺序表应用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

101 22 33 55 63 70 74 79 80 87455 10 2 87

Example Output

4No Found!No Found!10
-----------------------------------------------------------------------------------------------------
#include<stdio.h>#include<stdlib.h>#define maxsize 1000000typedef 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;}