[AcW]840模拟散列表

题目链接

tips:

  1.离散化强调“保序性”,即映射之前如果具有小于关系,映射之后仍需要保证小于关系。

  2.代码是逻辑的实现,拉链法就是用物理空间解决逻辑上的冲突。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

const int N=100003;

int h[N],e[N],ne[N],idx;
//定义为全局变量会自动初始化
/*
每个元素对应唯一一个编号,用这个编号来关联所有的信息,
e数组用这个编号存这个元素的值,ne数组用这个编号存插入时链中另一元素的编号。
*/
void insert(int x){
    int k=(x%N+N)%N;
    e[idx]=x;
    ne[idx]=h[k];
    h[k]=idx++;
}
//下标和数组被赋予的内涵,你逻辑想法的落脚点(实现方式),由抽象到具体。
bool find(int x){
    int k=(x%N+N)%N;
    for(int i=h[k];i != -1;i = ne[i])
        if(e[i] == x)
            return true;
    return false;
}
int main(){
    int n;
    scanf("%d",&n);

    memset(h,-1,sizeof(h));
    while(n--){
        char op[2];
        int x;
        scanf("%s%d",&op,&x);//scanf读入字符串,过滤空格

        if(*op == 'I') insert(x);
        else{
            if(find(x)) puts("Yes");
            else puts("No");
        }

    }
    return 0;
}
View Code

ps:

学会编程语言实现,然后脱离语言,摆脱编程语言的束缚,自然语言思考

posted @ 2020-04-30 13:58  SUMay  阅读(124)  评论(0编辑  收藏  举报