代码如下:

#include <iostream>
#include <vector>
using namespace std;template<typename K>
struct HashNode
{typedef HashNode<K> Node;K _val;Node * _next;HashNode(const K & val):_val(val),_next(nullptr){}
};template<typename K>
class HashTable
{public:typedef HashNode<K> Node;HashTable(int n = 10):_ht(10),_size(0){}bool insert(const K & val){checkCapacity();int idx = val % _ht.size();Node *cur = _ht[idx];while (cur){if (cur->_val == val) return false;cur = cur->_next;}cur = new Node(val);cur->_next = _ht[idx];_ht[idx] = cur;++_size;return true;}void checkCapacity(){if (_size == _ht.size()){int newC = _size == 0 ? 10 : 2 * _size;vector<Node *> newHt(newC);for (size_t i = 0; i < _ht.size(); i++){Node *cur = _ht[i];while (cur){Node *next = cur->_next;int idx = cur->_val % newHt.size();cur->_next = newHt[idx];newHt[idx] = cur;cur = next;}_ht[i] = nullptr;}swap(_ht, newHt);}}Node *find(const K & val){int idx = val % _ht.size();Node *cur = _ht[idx];while (cur){if (cur->_val == val) return cur;cur = cur->_next;}return nullptr;}bool erase(const K & val){Node *node = find(val);if (node){int idx = val % _ht.size();Node *cur = _ht[idx];Node *prev = nullptr;while (cur != node){prev = cur;cur = cur->_next;}Node *next = cur->_next;if (prev) prev->_next = next;else _ht[idx] = next;--_size;delete node;return true;}return false;}private:vector<Node *> _ht;int _size;
};int main()
{HashTable<int> h;h.insert(12321);h.insert(131);h.insert(123);cout << h.find(131)->_val << endl;return 0;
}

测试结果:

C++泛型编程实现哈希表(开散列法)相关推荐

  1. c++哈希(哈希表开散列实现)

    文章目录 0. 前言 1. 开散列 1.1 开散列概念 2. 开散列的代码实现 2.0 定义 2.1 插入实现--Insert 2.2 查找实现--Find 2.3 删除实现--Erase 2.4 仿 ...

  2. C++泛型编程实现哈希表(闭散列---线性探测)

    代码如下: #include <iostream> #include <vector> using namespace std;enum STATE {EXIST,DELETE ...

  3. 哈希(散列):(四)C语言实现 哈希 开散列法

    哈希(散列)的概念: https://blog.csdn.net/mowen_mowen/article/details/82943192 C语言实现:静态哈希表: https://blog.csdn ...

  4. 【C++哈希桶(开散列)】

    1. 开散列(哈希桶)概念 开散列法又叫链地址法(开链法),首先对关键码集合用散列函数计算散列地址,具有相同地址的关键码归于同一子集合,每一个子集合称为一个桶,各个桶中的元素通过一个单链表链接起来,各 ...

  5. 查找算法【哈希表】 - 散列查找及性能分析

    查找算法[哈希表] - 散列查找及性能分析 散列表虽然建立了关键字和存储位置之间的直接映像,但冲突不可避免,在散列表的查找过程中,有的关键字可以通过直接定址1次比较找到,有的关键字可能仍然需要和若干关 ...

  6. 哈希之开散列,闭散列

    先从数据查找开始说起吧,在线性结构,树形结构当中查找一个元素必须经过多次和一些元素进行比较,然后通过比较,查找到对应元素,这种方法多多少少,时间复杂度都是比较高的. 有没有一种方法时间复杂度,仅仅O( ...

  7. 哈希表(散列查找)(c/c++)

    通过哈希表进行查找的特点是:不需要比较关键字,而是通过哈希函数计算出关键字的位置.一般来讲,为了进行高效率的查找,要求哈希函数简单均匀.空间利用率高.关键字之间的冲突少. 关于散列查找的实现需要着重考 ...

  8. 哈希表(一)(散列)分离链接法实现

    编译环境:vs2015 实现100以内完全平方数的哈希表建立,当然更多数也是可以的--基本是例题难度,写了好大一天. 定义结构体: 主要实现函数: // ConsoleApplication5.cpp ...

  9. 哈希(Hash) - 开散列/闭散列

    文章目录: 认识哈希 哈希函数 处理冲突的方法 闭散列(开放定址法) 开散列(链地址法) 哈希表闭散列实现 闭散列基本框架 哈希表闭散列插入(insert) 哈希表闭散列删除(erase) 哈希表闭散 ...

最新文章

  1. vs code vue模板创建
  2. Annual Review:人与微生物组
  3. 一文搞懂 Java 泛型,非常详细!
  4. oracle拆分字段为多行,一句话实现字段拆分成多行
  5. C++在哪几种情况只能用intialization list 而不能用assignment?
  6. STL源码学习----集合相关算法
  7. 03.德国博士练习_02_admin_cluster
  8. 【DP】翻硬币(jzoj 3921)
  9. 用python编写最简单的记事本_Python使用字典实现的简单记事本功能示例
  10. 漂亮的jQuery tab选项卡插件
  11. 后缀的形容词_后缀:ing 名词、形容词或介词后缀
  12. c语言微秒级延时,linux下写个C语言程序,要求有0.5微秒以下的延时,要怎样写...
  13. 性能测试界“网红”云性能测试服务,了解一下?
  14. 菜鸟教程 php mysql_PHP MySQL 读取数据 | 菜鸟教程
  15. openstack 之 kolla安装镜像
  16. 数字图像处理 - 相关资源整理
  17. 如何批量转换文件格式
  18. JS中的预编译(AO、GO详解)
  19. 解决Visual Studio2019登录微软账户登录不上的问题
  20. 现代汽车、欧莱雅、贝壳找房、信达生物、诺维信等公司高管变动

热门文章

  1. C和指针之动态内存分配之输入很多整数进行排序
  2. 无代码iVX编程实现简单 小蜜蜂 经典游戏
  3. (附)python3 只需3小时带你轻松入门——python常用一般性术语或词语的简单解释
  4. python种颜色循环_Python 实现一个颜色色值转换的小工具
  5. 不小心把硬盘摔了一下,结果电脑变成这样了......
  6. 做生意最重要的诚信呢??? | 今日最佳
  7. 程序员与代码的几种关系,每种都会被我们鄙视
  8. Vim文本编辑器 指令大全(二)
  9. ajax和spa的区别,在XX团上消费过一次不正规的Spa,现在过来两个月公安局打电话叫我过去...
  10. 计算机辅助教育会议,子会议1:学习科学、计算机辅助合作学习、智慧教育