• 顺序表应用6:有序顺序表查询(SDUT 3330)


    Problem Description

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

    Input

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

    保证所有输入的数都在 int 范围内。

    Output

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

    Sample Input

    10
    1 22 33 55 63 70 74 79 80 87
    4
    55 10 2 87

    Sample Output

    4
    No Found!
    No Found!
    10

    题解:二分+顺序表

    #include <bits/stdc++.h>
    
    using namespace std;
    const int maxn = 1000005;
    
    struct node
    {
        int *elem;
        int len;
        int listsize;
    };
    void Creatlist(struct node &list, int n)
    {
        list.elem=new int[maxn];
        if(!list.elem)
            exit(OVERFLOW);
        for(int i=0; i<n; i++)
        {
            cin>>list.elem[i];
            list.len++;
        }
    }
    int BSearch(struct node &list, int l,int r,int x)
    {
        while(l<=r)
        {
            int m=(l+r)/2;
            if(list.elem[m]<x)
                l=m+1;
            else if (list.elem[m]>x)
                r=m-1;
            else
                return m+1;
        }
        return 0;
    }
    int main()
    {
        int n,m,x;
        struct node list;
        cin>>n;
        Creatlist(list,n);
        cin>>m;
        for(int i=0; i<m; i++)
        {
            cin>>x;
            int ans =BSearch(list,0,n,x);
            if(ans)
                cout<<ans<<endl;
            else
                cout<<"No Found!"<<endl;
        }
        return 0;
    }
    

     

  • 相关阅读:
    tomcat 添加用户名和密码
    linux系统下获取cpu、硬盘、内存使用率
    snmp 企业对应的mib编号
    String加密解密 2017.07.26
    Mongo日期
    linux sed 批量替换多个文件中的字符串
    Python和giL的关系
    vim
    乌班图
    Python
  • 原文地址:https://www.cnblogs.com/lcchy/p/10139553.html
Copyright © 2020-2023  润新知