您的位置:首页 > 理论基础 > 数据结构算法

数据结构——顺序表有序顺序表查询

2017-10-05 21:45 211 查看

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

Time Limit: 1000MS Memory Limit: 4096KB
[align=center]Submit Statistic[/align]

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


Hint

01
#include<stdio.h>
02
#include<stdlib.h>
03
#define
maxsize 100000
04
typedef
struct
05
{
06
int
data[maxsize];
07
int
last;
08
}
sl;
09
sl
*makeempty() //顺序表初始化函数
10
{
11
sl
*l;
12
l=(sl*)
malloc
(
sizeof
(sl));
13
l->last=-1;
14
return
l;
15
}
16
sl
*build(sl *l,
int
n)
//顺序表数据输入函数
17
{
18
int
i;
19
for
(i=0;
i<n; i++)
20
{
21
scanf
(
"%d"
,&l->data[i]);
22
}
23
l->last=n;
24
return
l;
25
}
26
int
found(sl
*l,
int
x,
int
n)
//数据查找函数
27
{
28
int
low=0,high=n-1,mid=0;
29
while
(low<=high)
30
{
31
mid=(low+high)/2;
32
if
(l->data[mid]<x)
33
{
34
low=mid+1;
35
}
36
else
if
(l->data[mid]>x)
37
{
38
high=mid-1;
39
}
40
else
41
{
42
   
return
mid+1;
43
}
44
}
45
return
0;
46
}
47
int
main()
48
{
49
sl
*l;
50
int
n,t,x,y;
51
scanf
(
"%d"
,&n);
52
l=makeempty();
53
l=build(l,n);
54
scanf
(
"%d"
,&t);
55
while
(t--)
56
{
57
scanf
(
"%d"
,&x);
58
y=found(l,x,n);
59
if
(!y)
60
{
61
printf
(
"No
Found!\n"
);
62
}
63
else
64
{
65
printf
(
"%d\n"
,y);
66
}
67
}
68
return
0;
69
}
70
71
72
/***************************************************
73
User
name: jk160618郭衣鹏
74
Result:
Accepted
75
Take
time: 84ms
76
Take
Memory: 500KB
77
Submit
time: 2017-10-05 21:42:55
78
****************************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: