链表法解决hash冲突
/* @链表法解决hash冲突
* 大单元数组,小单元链表
*/
#pragma once
#include <string>
using namespace std; template<typename map_t>
struct Node
{
size_t key;
map_t content; Node *next;
bool isEmpty; Node():next(NULL),isEmpty(true){}
}; // 根据hash函数将content添加到hash表中
template<typename map_t>
class ListHash
{
public:
ListHash();
~ListHash(); bool insert(size_t key, const map_t& val);
bool find(size_t key, map_t& val);
bool erase(size_t key); private:
size_t hash(size_t key); private:
size_t m_nElementSize;
Node<map_t> *m_pNodeArray;
}; //////////////////////////实现/////////////////////////
template<typename map_t>
ListHash<map_t>::ListHash()
{
m_nElementSize = ;
m_pNodeArray = NULL;
m_pNodeArray = new Node<map_t>[m_nElementSize];
} template<typename map_t>
ListHash<map_t>::~ListHash()
{
delete[] m_pNodeArray;
m_pNodeArray = NULL;
} template<typename map_t>
size_t ListHash<map_t>::hash( size_t key )
{
return key % m_nElementSize;
} template<typename map_t>
bool ListHash<map_t>::insert( size_t key, const map_t& val )
{
size_t idx = hash(key);
Node<map_t> *pNode = &m_pNodeArray[idx];
if (m_pNodeArray[idx].isEmpty)
{
pNode->key = key;
pNode->content = val;
pNode->isEmpty = false;
pNode->next = NULL;
}
else
{
while (pNode->next != NULL)
{
pNode = pNode->next;
} Node<map_t> *pTempNode = new Node<map_t>;
pTempNode->key = key;
pTempNode->content = val;
pTempNode->isEmpty = false;
pTempNode->next = NULL; pNode->next = pTempNode;
} return true;
} template<typename map_t>
bool ListHash<map_t>::erase( size_t key )
{
size_t idx = hash(key);
Node<map_t> *pNode = &m_pNodeArray[idx];
Node<map_t> *pPrepNode = NULL; while (pNode!= NULL)
{
if (pNode->key == key)
{
if (pPrepNode)
{
pPrepNode->next = pNode->next;
}
delete pNode;
return true;
} pPrepNode = pNode;
pNode = pNode->next;
}
return false;
} template<typename map_t>
bool ListHash<map_t>::find( size_t key, map_t& val )
{
size_t idx = hash(key);
Node<map_t> *pNode = &m_pNodeArray[idx]; while (pNode!= NULL)
{
if (pNode->key == key)
{
val = pNode->content;
return true;
} pNode = pNode->next;
}
return false;
}
链表法解决hash冲突的更多相关文章
- 大厂面试必问!HashMap 怎样解决hash冲突?
HashMap冲突解决方法比较考验一个开发者解决问题的能力. 下文给出HashMap冲突的解决方法以及原理分析,无论是在面试问答或者实际使用中,应该都会有所帮助. 在Java编程语言中,最基本的结构就 ...
- 解决hash冲突之分离链接法
解决hash冲突之分离链接法 分离链接法:其做法就是将散列到同一个值的所有元素保存到一个表中. 这样讲可能比较抽象,下面看一个图就会很清楚,图如下 相应的实现可以用分离链接散列表来实现(其实就是一个l ...
- 拉链法解决Hash节点冲突问题
<?php /* * hash::拉链法解决hash节点存储冲突问题 * ::2014-07-02 * ::Small_Kind */ class small_hash { private $s ...
- 拉链法解决hashtable冲突问题
拉链法解决冲突.拉链法解决冲突的做法是将所有的相同Hash值的key放在一个链表中,比如key3和key14在hash之后都是0,那么在数组的键为0的地方存储这两个值,形式是链表.如果不能理解我的文字 ...
- JDK8;HashMap:再散列解决hash冲突 ,源码分析和分析思路
JDK8中的HashMap相对JDK7中的HashMap做了些优化. 接下来先通过官方的英文注释探究新HashMap的散列怎么实现 先不给源码,因为直接看源码肯定会晕,那么我们先从简单的概念先讲起 ...
- 解决hash冲突的三个方法
通过构造性能良好的哈希函数,可以减少冲突,但一般不可能完全避免冲突,因此解决冲突是哈希法的另一个关键问题.创建哈希表和查找哈希表都会遇到冲突,两种情况下解决冲突的方法应该一致.下面以创建哈希表为例,说 ...
- 解决hash冲突的三个方法(转)
https://www.cnblogs.com/wuchaodzxx/p/7396599.html 目录 开放定址法 线性探测再散列 二次探测再散列 伪随机探测再散列 再哈希法 链地址法 建立公共溢出 ...
- 解决hash冲突方法
转自:https://www.cnblogs.com/wuchaodzxx/p/7396599.html 目录 开放定址法 线性探测再散列 二次探测再散列 伪随机探测再散列 再哈希法 链地址法 建立公 ...
- 解决hash冲突的三个方法-考虑获取
哈希表值的获取要考虑全部可能空间. 在链地址法中,可能空间就是具有相同hash值的链表. 目录 开放定址法 线性探测再散列 二次探测再散列 伪随机探测再散列 再哈希法 链地址法 建立公共溢出区 优 ...
随机推荐
- 记一次电信反射xss的挖掘与利用
0X0.前言 早上起床,打开手机习惯性刷刷新闻,却发现网络无法连接,本以为是光猫出现了问题,后来发现是忘记续费,欠费了. 在网上充值完之后,等了有将近十分钟,网依旧没恢复.随打了个电话给客服,客服在后 ...
- JS实现EasyUI ,Datagrid,合并单元格功能
为了实现datagrid的合并单元格效果,datagrid的数据加载方式肯定是要写在JS文件内部的. 一:在JS内部添加Datagrid数据加载方法如下: $("#id").dat ...
- 【扩展欧几里得】NOIP2012同余方程
题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正 ...
- ECharts模拟迁徙案例
ECharts模拟迁徙案例 独立页面:http://211.140.7.173:8081/t/wuhairui/ditu/a.html
- flask配置管理
配置管理 复杂的项目需要配置各种配置环境,如果设置项缺少可以直接硬编码进来,比如下面的方式: app.config['DEBUG']=True app.config['SECRET_KEY'] = ' ...
- org.springframework.data.redis.serializer.SerializationException: Cannot serialize;
前言 本文中提到的解决方案,源码地址在:perfect-ssm,希望可以帮你解决问题. 问题描述 在Spring与Redis整合过程中,出现了如下报错: org.springframework.dat ...
- Java与算法之(11) - 合并排序
天下事,合久必分,分久必合.合并排序的基本思想正是先分再合. 例如对3, 1这个数列排序,首先是分,分为3和1两个数列,然后再合并并排序.合并需要额外的辅助空间,即建立一个两个数列长度之和的空数组用于 ...
- zoj 3228:Searching the String
Description Little jay really hates to deal with string. But moondy likes it very much, and she's so ...
- hihoCoder #1094 : Lost in the City(枚举,微软苏州校招笔试 12月27日 )
#1094 : Lost in the City 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi gets lost in the city. He ...
- HDU 1004 Let the Balloon Rise【STL<map>】
Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...