数据结构与算法(c++)- hash表

什么是hash表

hash法,hash表,散列法是一个东西。
hash表是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。用于映射的函数叫做散列函数。

若关键字为k,则其值存放在f(k)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数,按这个思想建立的表为散列表。

代码

使用STL容器vector实现hash表

vector<vector<vector<int*>*>*>* V = new vector<vector<vector<int*>*>*>[10];
for (int i = 0; i < 10; i++)
{
	V[i].push_back(new vector<vector<int*>*>[10]);
	for (int j = 0; j < 10; j++)
	{
		V[i][j]->push_back(new vector<int*>);
		for(int k = 0;k<10;k++)
		{
			V[i][j][k] = new 链表;						//当然也可以是数组,能存数据就行
		}
	}
}

如下图,上述代码创建了10×10×10个链表,而这里图片中只展示了其中一种。
在这里插入图片描述

分析

  1. 这里我们设计了10×10×10个链表用来存储数据,而这每一个链表都是能够通过特定值找到的。比如这里,第一层4,第二层5,第三层6,vector[4][5][6]就对应了这个链表。456就可以做为key,设计的散列函数f得到数据。
  2. 由于是一一对应映射的关系(通过指针),能够非常快速地获取到所需的数据。
  3. 设计合理的算法才能避免冲突,比如,图中的key为456对应了这个链表,但往往数据量是庞大,这个链表不可能只存一个数,1456也作为了代表链表的第二个节点的key存储,这时f(456)==f(1456),虽然它们key不一样,却对应同一个链表,还有2456、3456…(取决于你的散列函数怎么写)。那为什么不设计更多层的vector?当然可以,只要能避免冲突就行,同时还要便于管理,这里整个链表的数据可以看做是同一类的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小冯爱编程

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值