首页 > 顺序表应用6:有序顺序表查询

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

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

Time Limit: 7MS Memory Limit: 700KB
Submit Statistic

Problem Description

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

Input

第一行输入整数n,表示顺序表的元素个数;

第二行依次输入n个各不相同的有序整数,代表表里的元素;

第三行输入整数t,代表要查询的次数;

第四行依次输入t个整数,代表每次要查询的数值。

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

#include

#include

#include

#define LISTINCREASMENT 20012                 /*每次分配元素的个数*/

#define  LISTSIZE 20012                         /*顺序存储的最大个数*/

#define  OVERFLOW -1

#define  OK 1

int n,m;

using namespace std;

typedef int ElemType;





typedef struct                                   /*顺序表元素的的定义*/

{

    ElemType * elem;

    int length;

    int listsize;

} Sqlist;





int SqInitial(Sqlist &L)                           /*初始化线性表*/

{

    L.elem=(ElemType *) malloc (LISTSIZE*sizeof(ElemType));

    if (! L.elem)  exit(OVERFLOW); //存储分配失败

    L.length=0;

    L.listsize=LISTSIZE;

    return OK;

}





int ListInsert(Sqlist &L,int i,ElemType e)            /*插入元素*/

{

    if(i<1|| i > L.length+1) exit(-1);

    if(L.length>=L.listsize)

    {

        ElemType*newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREASMENT)

                                            *sizeof(ElemType));

        if(!newbase)   return  OVERFLOW;// 当前存储空间已满





L.elem=newbase;

        L.listsize+=LISTINCREASMENT;         /*表的容量不足分配内存*/

    }

    ElemType *  q=&(L.elem[i-1]);

    ElemType *  p;

    for(p=&(L.elem[L.length-1]); p>=q; --p)

        *(p+1)=*p;

    *q=e;

    ++L.length;

    return OK;





}

void display(Sqlist &L)

{

    int i;

    for(i=0;i
    {

        cout<
    }

     cout<
}









int query(Sqlist &L,int i,int j,int key)

{

    int mid;

    while(i<=j)

    {

        mid = (j+i)/2;

        /*cout<<"L.elem[mid]=="<
        cout<<"L.elem[i]=="<
        cout<<"L.elem[j]=="<
        */

        if(L.elem[mid]==key)

            return mid+1;

        if(L.elem[mid]
        {

            i = mid+1;

        }

        if(L.elem[mid]>key)

        {

            j = mid-1;

        }

    }

    return -1;

}









int main()

{

    Sqlist L,L1,L2;

    int t =1 ,d;

    cin>>n;

    SqInitial(L);

    //printf("构建长度为len的顺序表。 ");

    for(t=1; t<=n; t++)                         /*构建长度为n的顺序表*/

    {

        //printf("Please input the %dth list elem:",t);

        scanf("%d",&d);

        ListInsert(L,t,d);

    }

    cin>>m;

    while(m--)

    {

        scanf("%d",&t);

        d = query(L,0,n-1,t);

        if(d==-1)

            cout<<"No Found!"<
        else

            cout<




    }













return 0;

}


转载于:https://www.cnblogs.com/CCCrunner/p/6444613.html

更多相关:

  •         Apache POI是一个开源的利用Java读写Excel,WORD等微软OLE2组件文档的项目。        我的需求是对Excel的数据进行导入或将数据以Excel的形式导出。先上简单的测试代码:package com.xing.studyTest.poi;import java.io.FileInputSt...

  • 要取得[a,b)的随机整数,使用(rand() % (b-a))+ a; 要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a; 要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1; 通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。 要取得a到b之间的...

  • 利用本征图像分解(Intrinsic Image Decomposition)算法,将图像分解为shading(illumination) image 和 reflectance(albedo) image,计算图像的reflectance image。 Reflectance Image 是指在变化的光照条件下能够维持不变的图像部分...

  • 题目:面试题39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 限制: 1 <= 数组长度 <= 50000 解题: cl...

  • 题目:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树:      5     /    2   6   /  1   3示例 1: 输入: [1,6,3,2,5] 输出...