哈希表判断冲突的条件有点不懂

问题描述

哈希表判断冲突的条件有点不懂

void CreateHashList()
{ int i;
for(i=0; i<HASH_LENGTH;i++)
{ HashList[i].py="";
HashList[i].k=0;
HashList[i].si=0;
}
for(i=0;i<HASH_LENGTH;i++)
{ int sum=0;
int adr=(NameList[i].k)%M; //哈希函数
int d=adr;
if(HashList[adr].si==0) //如果不冲突
{ HashList[adr].k=NameList[i].k;
HashList[adr].py=NameList[i].py;
HashList[adr].si=1;
}
else //冲突

{ do
{ d=(d+NameList[i].k%10+1)%M; //伪随机探测再散列法处理冲突

sum=sum+1; //查找次数加1

}while (HashList[d].k!=0);
HashList[d].k=NameList[i].k;
一开始不是用循环给所有的Hashlist[i].k赋值为0啦吗,为什么后面判断冲突的循环终止的条件是while (HashList[d].k!=0);不是所有Hashlist[i].k赋值为0啦吗,那样不就是覆盖已经填有数据的地址吗

时间: 2024-10-24 22:06:44

哈希表判断冲突的条件有点不懂的相关文章

数据结构哈希表有关问题求助

问题描述 数据结构哈希表有关问题求助 一直搞不懂哈希表等我问题,还有线性探测再散列和二次探测再散列,请举例子帮我详细讲解一下,谢谢了 解决方案 [数据结构]哈希表数据结构-哈希表数据结构之哈希表

哈希表在插入时发生了冲突,在查找时如何避过冲突的

问题描述 哈希表在插入时发生了冲突,在查找时如何避过冲突的 比如键值1和3通过哈希函数计算后都是2,3计算得到的偏移之后变成3了,现在我查找时1,3都是2.我如何让3找到3呢? 解决方案 看你是怎么解决冲突的,开放定址法的话,就顺序找下去.如果是拉链法,就沿着这个值项找下去. 解决方案二: 哈希表的目的不是为了得到正确的值,而是为了加速查找. 我刚才告诉你了,我们考虑一个极端的情况,你可以将线性表和线性查找当作哈希的特例.你说线性查找是怎么找到目标的? 解决方案三: 几种常见的解决冲突办法

C#中哈希表(HashTable)用法实例详解(添加/移除/判断/遍历/排序等)_C#教程

本文实例讲述了C#中哈希表(HashTable)用法.分享给大家供大家参考,具体如下: 1.  哈希表(HashTable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,同时key是区分大小写:value用于存储对应于key的值.Hashtable中keyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键

PHP内核探索之PHP中的哈希表

在PHP内核中,其中一个很重要的数据结构就是HashTable.我们常用的数组,在内核中就是用HashTable来实现.那么,PHP的HashTable是怎么实现的呢?最近在看HashTable的数据结构,但是算法书籍里面没有具体的实现算法,刚好最近也在阅读PHP的源码,于是参考PHP的HashTable的实现,自己实现了一个简易版的HashTable,总结了一些心得,下面给大家分享一下. 笔者github上有一个简易版的HashTable的实现:HashTable实现 另外,我在github有

[PHP内核探索]PHP中的哈希表

在PHP内核中,其中一个很重要的数据结构就是HashTable.我们常用的数组,在内核中就是用HashTable来实现.那么,PHP的HashTable是怎么实现的呢?最近在看HashTable的数据结构,但是算法书籍里面没有具体的实现算法,刚好最近也在阅读PHP的源码,于是参考PHP的HashTable的实现,自己实现了一个简易版的HashTable,总结了一些心得,下面给大家分享一下. 笔者github上有一个简易版的HashTable的实现:HashTable实现 另外,我在github有

数据结构与算法07 之哈希表

  哈希表也称为散列表,是根据关键字值(key value)而直接进行访问的数据结构.也就是说,它通过把关键字值映射到一个位置来访问记录,以加快查找的速度.这个映射函数称为哈希函数(也称为散列函数),映射过程称为哈希化,存放记录的数组叫做散列表.比如我们可以用下面的方法将关键字映射成数组的下标:arrayIndex = hugeNumber % arraySize.         哈希化之后难免会产生一个问题,那就是对不同的关键字,可能得到同一个散列地址,即同一个数组下标,这种现象称为冲突,那

《Redis设计与实现》阅读:Redis底层研究之哈希表hashtable

        字典是一种存储键值对的抽象数据结构,其又被称为符号表(symbol table).关联数组(associative array)或映射(map).Redis使用字典存储键值对,而Redis在底层是通过自定义的哈希表来实现字典这一数据结构的.本文,我们将研究Redis中哈希表的实现.         结构         一个哈希表包含多个哈希表节点,每个哈希表节点保存了字典中的一个键值对.在Redis中,哈希表用dictht表示,其结构如下:         其中,      

浅谈算法和数据结构 十一 哈希表

在前面的系列文章中,依次介绍了基于无序列表的顺序查找,基于有序数组的二分查找,平衡查找树,以及红黑树,下图是他们在平均以及最差情况下的时间复杂度: 可以看到在时间复杂度上,红黑树在平均情况下插入,查找以及删除上都达到了lgN的时间复杂度. 那么有没有查找效率更高的数据结构呢,答案就是本文接下来要介绍了散列表,也叫哈希表(Hash Table) 什么是哈希表 哈希表就是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值. 哈希的思路很简单

哈希表(Hashtable)

一,哈希表(Hashtable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写:value用于存储对应于key的值.Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的key/value键值对. 二,哈希表的简单操作 在哈希表中添加一个key/value键值对:Hashta