顺序表应用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; }
相关文章推荐
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表的查询
- SDUTACM 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- SDUT 3330顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- SDUT 3330 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询
- 顺序表应用6:有序顺序表查询