hash table(完全散列实现的哈希表)

完全散列
特点:静态的,创建时候完成了散列表的生成。
不可以删,也不可以增加数据。只可以修改数据。
内部用全域散列生成

#ifndef C11LEARN_HASHPERFECT_H
#define C11LEARN_HASHPERFECT_H
#include "KeyNode.h"
#include "HashUniversal.h"
template<typename T>
class HashPerfect
{protected:HashUniversal<T>** array;int capacity;long long large_prime_numbers;long long a;long long b;
private:HashPerfect(const HashPerfect<T>& hashUniversal){};const HashPerfect<T>& operator=(const HashPerfect<T>& hashUniversal){};
public:HashPerfect(KeyNode<T>*array,int length,int capacity,long long large_prime_numbers = 100001651);virtual ~HashPerfect();T & operator[](int key);protected:virtual int hashing(int key);
};
template<typename T>
HashPerfect<T>::HashPerfect(KeyNode<T>*arr,int length,int capacity,long long large_prime_numbers):capacity(capacity),large_prime_numbers(large_prime_numbers){array = new HashUniversal<T>*[this->capacity];int *int_array = new int[this->capacity]();a = random_include_left_right(1ll,this->large_prime_numbers-1);b = random_include_left_right(0ll,this->large_prime_numbers-1);for (int i = 0; i < length; ++i) {int_array[hashing(arr[i].key)] += 1;}for (int i = 0; i < this->capacity; ++i) {if(int_array[i] == 0){array[i] = nullptr;}else{array[i] = new HashUniversal<T>(int_array[i]*int_array[i],large_prime_numbers);}}for (int i = 0; i < length; ++i) {(*array[hashing(arr[i].key)])[arr[i].key] = arr[i].value;}
}
template<typename T>
T & HashPerfect<T>::operator[](int key){if(array[hashing(key)] == nullptr)throw "no find";return (*array[hashing(key)])[key];
}
template<typename T>
int HashPerfect<T>::hashing(int key){return ((a*key+b)%large_prime_numbers)%capacity;
}
template<typename T>
HashPerfect<T>::~HashPerfect(){if(array!= nullptr){for (int i = 0; i < capacity; ++i) {if(array[i]!= nullptr){delete array[i];array[i] = nullptr;}}delete[] array;array = nullptr;}}#endif //C11LEARN_HASHPERFECT_H

辅助类
1⃣️KeyNode地址链接
2⃣️HashUniversal地址链接

测试代码

     KeyNode<string> nodes[] = {KeyNode<string>(0,"hello"),KeyNode<string>(1,"world"),};HashPerfect<string> hashPerfect(nodes,2,20);cout<<hashPerfect[0]<<endl;cout<<hashPerfect[1]<<endl;hashPerfect[1] = "you";cout<<hashPerfect[1]<<endl;

hash table(完全散列实现的哈希表)相关推荐

  1. hash table(全域散列法实现的哈希表)

    hash table(全域散列法实现的哈希表) 利用每次重建哈希表时随机生成散列函数 #ifndef C11LEARN_HASHUNIVERSAL_H #define C11LEARN_HASHUNI ...

  2. hash table(开放寻址法-双重散列实现的哈希表)

    hash table(开放寻址法-双重散列实现的哈希表) #ifndef C11LEARN_HASHDOUBLE_H #define C11LEARN_HASHDOUBLE_H #include &q ...

  3. 散列算法和哈希表结构

    散列算法和哈希表结构 散列算法和哈希表结构 算法概述 Hash ,一般翻译做" 散列" ,也有直接音译为" 哈希" 的,就是把任意长度的输入(又叫做预映射, p ...

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

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

  5. 查找 之 散列表查找(哈希表)

    基础概念 散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key).这里对应关系f称为散列函数,又称为哈希(Hash)函数. 采用散列技术将 ...

  6. 数据结构与算法 ~ 查找 ~ 散列查找(哈希~线性探查法和二次探查法)

    数据结构与算法 ~ 查找 ~ 散列查找(哈希~线性探查法和二次探查法) /*search-hash*/ #include<math.h> #include<stdio.h> # ...

  7. 散列表(也叫哈希表),

    google搜索到的头条:散列表(也叫哈希表),是根据关键码值直接进行访问的数据结构,也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列函数,存放记录的数组 ...

  8. 【STL学习】自己动手C++编程实现hash table(散列表)

    SGI STL中散列表采用链接法解决冲突.结构中维护了一个vector,vector中每一个元素称为一个桶(bucket),它包含的是一个链表的第一个节点. 下面代码展示了自己编程实现的hash ta ...

  9. 索引存储和散列存储(哈希)的区别吧

    两者都一定的相似性,可以加快检索速度,是一种存储结构. 但是索引的方式相当于给一个本书加一个目录,这样子就可以快速找到每一个章节.好处就是增加检索速度,坏处就是增加了书的厚度,而且如果改变了书的内容, ...

最新文章

  1. Centos7_ELK5.4.1配置部署
  2. scrapy + selenium + chromedriver爬取动态数据
  3. 拼音表大全图_一年级语文26个汉语拼音字母表读法+写法+笔顺,孩子现在正需要...
  4. 怎么拦截触摸事件IOS
  5. 使用VMware VSphere WebService SDK进行开发 (六)——检测告警信息
  6. SpringBoot AutoConfiguration魔术如何工作?
  7. CSS之Multi-columns的列数和列宽
  8. 高级java技术web组件_(重温)JavaWeb--Servlet技术(二)(JavaWeb 的三大组件之一)...
  9. openssl evp 对称加密(AES_ecb,ccb)
  10. matlab qpsk调制 函数,MATLAB_QPSK调制与解调
  11. 【C语言】大小写转换
  12. Luogu 3537 [POI2012]SZA-Cloakroom
  13. downwell什么意思_downwelling_downwelling是什么意思翻译
  14. Array Shrinking(CodeForces - 1312E )
  15. GB28181设备端PS流封装和发送
  16. 工具使用技巧:将图片公式转为Word里的公式
  17. 使用 istringtream 注意其状态
  18. 解决运行gazebo时出现“[gazebo-2] process has died [pid 7920, exit code 255.....“的问题
  19. Day02 Jinja2模板引擎Bootstrap
  20. 《上市风云》荐书——唯勇气最可贵

热门文章

  1. React Native之组件(Component)生命周期学习笔记
  2. Android之使用getIdentifier()获取资源Id
  3. bootstrap 开源框架demo_5 个接私活必备的 Java 开源项目!
  4. 40张令人震惊的对比图,第一张细思恐极
  5. 收藏 : 50个Excel逆天功能,一秒变“表哥”
  6. 兄弟机cnc系统面板图解_FANUC软操作面板的应用介绍,真的太详细了
  7. java中string 和stringbuffer的区别_Java中的String,StringBuilder,StringBuffer三者的区别...
  8. 初级Java开发工程师!绝密文档,面试手册全面突击!!!秋招已经到来
  9. 按id进行查找按名称进行排序_Excel工作表中如何按需要的顺序快速进行排序
  10. 奥的斯服务器状态显示,奥的斯电梯调试服务器(俗称st)按键介绍