学习目标:
没。
掌握hash表
学习时间:
提示:这里可以添加计划学习的时间
例如:
1、 周一至周五晚上 10点—晚上12点
2、 周六周日下午 12 点-17 点
#include<iostream>
#include<cstring>
using namespace std;
#define ll long long
#define MOD 1000007
#define Maxn 5000010
ll val[Maxn]; //数组存值
ll nxt[Maxn]; //索引
ll cnt[Maxn]; //计数
ll head[Maxn]; //
ll ci;
void hashcun(ll a)//存值
{
ll x=a%MOD; //取余
for(ll i=head[x];~i;i=nxt[i]) //nxt[nxt[i]]
{
if(val[i]==a)
{
cnt[i]++;
return;
}
}
//能运行到在都是x从没取过
val[ci]=a;
cnt[ci]++; //次数加1
nxt[ci]=head[x]; //上一次余数x的值下标记录在nxt中
// nxt[1]=-1; nxt[2]=1; nxt[4]=2;
head[x]=ci; //head数组存放余数下标值 //又再次出现x,对head[x]刷新
ci++;
return;
}
ll hashcha(ll a)//˛查找
{
ll x=a%MOD;
for(ll i=head[x];~i;i=nxt[i])
if(val[i]==a)
return cnt[i];
return 0;
}
int main (){
memset(head,-1,sizeof(head));
//hashcun(3213);//
// hashcun(3214);
//hashcun(3214);
//ll a=hashcha(3213),b=hashcha(3214);
//ll c=hashcha(23);
//ÔÚhash±íÖвéÕÒ£¬ÓÐÎÞ´æÈë3214£¬·µ»ØÖµÊÇ´æÈë3212µÄ´ÎÊý
//cout<<a<<" "<<b<<" "<<c<<endl; //Êä³ö a==1£¬b==2£¬c==0
hashcun(2);hashcun(3);hashcun(4);hashcun(5);
hashcun(12);hashcun(13);
hashcun(22);
hashcun(32);
hashcun(2);
cout<<hashcha(2);
}