zoukankan      html  css  js  c++  java
  • [Codevs 1230]元素查找(手写哈希表)

    题目连接:http://codevs.cn/problem/1230/

    说白了就是要我们自己手写一个哈希表的数据结构来实现加入和查找功能。map也能直接过(我第一次写就是用map骗AC的)


    提一下个人理解的哈希表的实现(以下说的是线性寻址法)。假设有误还请各位大神不吝不吝赐教

    用一个数组模拟哈希表,函数f(x)=数字x在哈希表中出现的下标的最小可能值。一般f(x)=x mod t,t就是哈希表的长度

    以下就是一个哈希表的演示样例,假设遍历哈希表时指针走出了哈希表的终点。就进入起点又一次遍历

    对于每次向哈希表中加入一个数x,从下标f(x)開始查找,以上文所说的遍历方式查找,直到找到装有x这个数的哈希表元素。返回查找成功(哈希表中有x这个数)。假设遍历过程中遇到了空的哈希表的一个元素就返回查找失败(哈希表中没有x这个数)。

    插入元素的过程类似于查找。向哈希表中插入数字x时,首先从下标f(x)開始查找,直到找到第一个为0的哈希表元素,将数字x插入进去。

    以下是此题代码:

    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <algorithm>
    
    #define MAXN 1000008
    #define MOD 1000007
    
    using namespace std;
    
    int hashTable[MAXN];
    
    void update(int x) //将数字x增加哈希表
    {
        int num=x;
        x%=MOD;
        while(1)
        {
            if(!hashTable[x])
            {
                hashTable[x]=num;
                return;
            }
            if(hashTable[x]!=num)
            {
                x++;
                if(x==MAXN) x=0;
            }
            else return;
        }
    }
    
    bool query(int x) //查找哈希表中是否有数字x
    {
        bool found=false;
        int num=x;
        x%=MOD;
        while(1)
        {
            if(!hashTable[x]) return false;
            if(hashTable[x]!=num)
            {
                x++;
                if(x==MAXN) x=0;
            }
            else return true;
        }
    }
    
    int main()
    {
        int n,m,x;
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&x);
            update(x+1);
        }
        for(int i=1;i<=m;i++)
        {
            scanf("%d",&x);
            if(query(x+1)) printf("YES
    ");
            else printf("NO
    ");
        }
        return 0;
    }

    
  • 相关阅读:
    mysql 状态查看
    Float浮点内存存储方式 转
    printf("%d",5.01)和printf("%f",5)的输出结果
    RMBP
    小D课堂【SpringBoot】接口Http协议开发实战
    尚硅谷【SpringBoot】web(源码讲解太多不建议阅读)
    尚硅谷【SpringBoot】入门
    51cto-spring boot(一Spring4快速入门)
    Eclipse使用Maven时出现:Index downloads are disabled, search results may be incomplete.问题解决
    maven(二)
  • 原文地址:https://www.cnblogs.com/lytwajue/p/6830012.html
Copyright © 2011-2022 走看看