Hash表,类似map用法

学习目标:

没。

掌握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);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

axtices

谢谢您的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值