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

来源:互联网 发布:mac怎么看电池循环 编辑:程序博客网 时间:2024/05/17 21:25

题目链接:点击打开链接

注意:使用二分查找


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

Time Limit: 7MS Memory limit: 700K

题目描述

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

输入

 第一行输入整数n,表示顺序表的元素个数;
第二行依次输入n个各不相同的有序整数,代表表里的元素;
第三行输入整数t,代表要查询的次数;
第四行依次输入t个整数,代表每次要查询的数值。

输出

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

示例输入

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

示例输出

4No Found!No Found!10

提示


代码实现:

#include <iostream>#include<stdio.h>#include<stdlib.h>#define maxsize 10000using namespace std;typedef struct{   int *elem;   int length;   int lastsize;}Sq;int initList(Sq *L){    L->elem=(int *)malloc(maxsize *sizeof(int));    if(!L->elem) return -1;    L->length=0;    L->lastsize=maxsize;    return 0;}void create(Sq *L,int n){    int i;    for(i=0;i<n;i++)        scanf("%d",&L->elem[i]);    L->length=n;}int Found(Sq *L,int i,int j,int n){    while(i<=j)    {        int mid=(i+j)/2;        if(L->elem[mid]==n)            return mid+1;        if(L->elem[mid]>n)            j=mid-1;        else            i=mid+1;    }    return 0;}void display(Sq *L){    for(int i=0;i<L->length-1;i++)        printf("%d ",L->elem[i]);    printf("%d\n",L->elem[L->length-1]);}int main(){    Sq L;    int n,m;    int t;    scanf("%d",&n);    initList(&L);    create(&L,n);    scanf("%d",&m);    while(m--)    {        scanf("%d",&t);        int f=Found(&L,0,n-1,t);        if(f==0)            printf("No Found!\n");        else            printf("%d\n",f);    }    return 0;}

0 0
原创粉丝点击