链表法解决hash冲突[亲测有效]

/*@链表法解决hash冲突*大单元数组,小单元链表*/#pragmaonce#includeusingnamespacestd;templatestructNode{s

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

/* @链表法解决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 = 3;
    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;
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120238.html原文链接:https://javaforall.net

(0)
上一篇 2021年12月18日 上午10:00
下一篇 2021年12月18日 上午11:00


相关推荐

  • 相机标定的原理及实现

    相机标定的原理及实现本文参考文档:原理部分:https://blog.csdn.net/honyniu/article/details/51004397代码部分:https://www.cnblogs.com/wildbloom/p/8320351.html;https://blog.csdn.net/firemicrocosm/article/details/48594897#1、相机标定的原理摄像…

    2022年5月28日
    33
  • 四、全卷积网络FCN详细讲解(超级详细哦)[通俗易懂]

    四、全卷积网络FCN详细讲解(超级详细哦)[通俗易懂]四、FCN全卷积网络+upsampling上采样+opencv图像金字塔(超级详细哦)1、全卷积网络(FCN)的简单介绍1.1、CNN与FCN的比较1、上采样理论2、OpenCV图像金字塔1、全卷积网络(FCN)的简单介绍1.1、CNN与FCN的比较在传统的cnn网络中,在在最后的卷积层之后会接上若干个全连接层,将卷积层产生的特征图(featuremap)映射成为一个固定长度的特征向量。一…

    2022年6月18日
    31
  • 负载均衡之一致性哈希算法

    说到负载均衡的hash算法,自然会联想起如下这样的算法hash(object)%nodeTotal而在集群中,机器的动态上下线是常见的情况,如果集群是无状态的,那么上述的算法没有问题.但是如果是缓存之类的集群,节点的动态上下线会导致几乎所有的key的重新映射,这样造成的影响是数据错乱,相同备份的数据同时存在于集群中的多个节点,造成内存空间的浪费为了解决上述的问题,一致性哈希算法就被…

    2022年4月14日
    53
  • 爱奇艺需要优化的功能_爱奇艺怎么调三倍速度

    爱奇艺需要优化的功能_爱奇艺怎么调三倍速度爱奇艺技术分享:爱奇艺Android客户端启动速度优化实践总结

    2022年4月21日
    65
  • 用idea创建javaweb项目详解_idea怎么创建普通java项目

    用idea创建javaweb项目详解_idea怎么创建普通java项目文章目录一、创建web项目1、打开idea软件,点击界面上的CreateNewProject2、进入如下界面。选中javaEnterprise,配置jdk,tomcat,勾选WebApplication案例,注意勾选生成web.xml文件3、指定项目的名称及项目文件的保存地址4、创建成功5、创建class文件和lib文件夹  点击项目的WEF-INF文件夹,右…

    2026年2月4日
    6
  • Spring Cloud版本与Spring Boot版本之间匹配关系「建议收藏」

    Spring Cloud版本与Spring Boot版本之间匹配关系「建议收藏」很多人在使用springboot和springcloud,但是对于这两者之间的版本关系不是很清楚,特别是在面临升级的时候不知道该如何操作。本文简要摘录的官方文档的部分内容作为依据,供广大同行参考。问题的提出,我现在使用的是1.5.1版本的springboot和Edgware.RELEASE版本的springcloud,我想升级到springboot到2.0.0,springcloud需要升…

    2022年4月30日
    72

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号