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

TimeLimit: 7MS Memory Limit: 700KB

SubmitStatistic

ProblemDescription

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

Input

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

Output

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

ExampleInput

10

122 33 55 63 70 74 79 80 87

4

5510 2 87

ExampleOutput

4

NoFound!

NoFound!

10

Hint

 

Author

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<stack>
#include<queue>
#include<deque>
#define max 20002
using namespace std;
typedef struct node
{
 int *elem;
 int size;
 int length;
}list;
int init(list *l)
{

  l->elem=(int*)malloc(max*sizeof(int));
  if(l->elem) return 0;
  l->length = 0;
  l->size = max;
  return 1;

}

void creat(list *l,int n)
{
    for(int i=1;i<=n;i++)
    {scanf("%d",&l->elem[i]);}
    l->length = n;
}


void changelist(list *l,int m)
{
    for(int i=0;i<m;i++)
     {   int tmp = l->elem[0];
    for(int j =0;j<l->length-1;j++)

    l->elem[j] = l->elem[j+1];

    l->elem[l->length-1] = tmp;

    }
}
void check(list*l,int s,int h,int m)
{
  int i,t;
  for(i=1;i<=m;i++)
  {
    t = l->elem[s];
    l->elem[s++]=l->elem[h];
    l->elem[h--]=t;
  }
}
void print(list*c)
{
    for(int i=1;i<c->length;i++)
    {
        printf("%d ",c->elem[i]);
    }
    printf("%d\n",c->elem[c->length]);
}
int order(list*l,int n)
{
    int x,mid,low,high;
    scanf("%d",&x);
    low = 1;
    high =n;
    while(low<=high)
    {
        mid = (low+high)/2;
        if(x>l->elem[mid])
         low = mid+1;
         else if(x<l->elem[mid])
         high = mid-1;
         else
         return mid;

    }
    return -1;
}
int main()
{


   list l;

   int x,n ,t;
   cin>>n;
   init(&l);
   creat(&l,n);
   cin>>t;
   while(t--)
   {
     x = order(&l,n);
     if(x==-1)
     cout<<"No Found!"<<endl;
     else
     cout<<x<<endl;
   }

return 0;


}



/***************************************************
User name: jk160505徐红博
Result: Accepted
Take time: 8ms
Take Memory: 240KB
Submit time: 2017-01-14 21:08:20
****************************************************/