- 浏览: 765314 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
散列表(hash table):是表示集合和字典的另一种有效方法,它提供了一种完全不同的存储和搜索方式,通过将关键码映射到表中某个位置上来存储元素,然后根据关键码用同样的方式直接访问。
需要注意两点:
1.散列函数的定义域必须包括需要存储的全部关键码,而如果散列表允许有m个地址时,其值域必须在0到m-1之间。
2.散列函数计算出来的地址应能均匀分布在整个地址空间中。
散列函数中用的最多的是除留余数法,m个地址,取一个不大于m但最接近m的素数p作为除数,
hash(key)=key%p,素数p不是接近2的幂
需要注意两点:
1.散列函数的定义域必须包括需要存储的全部关键码,而如果散列表允许有m个地址时,其值域必须在0到m-1之间。
2.散列函数计算出来的地址应能均匀分布在整个地址空间中。
散列函数中用的最多的是除留余数法,m个地址,取一个不大于m但最接近m的素数p作为除数,
hash(key)=key%p,素数p不是接近2的幂
#ifndef HASHTABLE_H #define HASHTABLE_H const int DefaultSize=100; enum KindOfStatus{ Active,//有元素 Empty, Deleted }; template<typename E,typename K> class HashTable{ public: HashTable(const int d,int sz=DefaultSize); ~HashTable(){ delete []ht; delete []info; } HashTable<E,K>& operator=(const HashTable<E,K>& ht2); bool Search(const K k1,E& e1)const; bool Insert(const E& e1); bool Remove(const K k1,E& e1); void makeEmpty(); private: int divitor;//散列函数的除数 int CurrentSize,TableSize; E *ht;//散列函数的存储数组 KindOfStatus *info; int FindPos(const K k1)const; int operator==(E& e1){ return *this==e1; } int operator!=(E& e1){ return *this!=e1; } }; template<typename E,typename K> HashTable<E,K>::HashTable(int d,int s){ divitor = d; TableSize = sz; CurrentSzie = 0; ht = new E[TableSize]; info = new KindOfStatus[TableSize]; for(int i=0;i<TableSize;i++) info[i]=Empty; } template<typename E,typename K> int HashTable<E,K>::FindPos(const K k1) const { int i = k1%divitor; int j = i; do{ if(info[j]==Empty||info[j]==Active&&ht[j]==k1){ return j; }else{ j++; } }while(j!=i); return j;//表满 } template<typename E,typename K> bool HashTable<E,K>::Search(const K k1, E &e1) const { int i = FindPos(k1); if(info[i]!=Active||ht[i]!=k1) return false; e1 = ht[i]; return true; } template<typename E,typename K> void HashTable<E,K>::makeEmpty() { for(int i=0;i<TableSize;++i) info[i]=Empty; CurrentSize=0; } template<typename E,typename K> HashTable<E,K>& HashTable<E,K>::operator=(const HashTable<E,K>& ht2) { if(this!=&ht2){ delete []ht; delete []info; TableSize = ht2.TableSize; ht = new E[TableSize]; info = new KindOfStatus[TableSize]; for(int i=0;i<TableSize;i++){sz ht[i] = ht2.ht[i]; info[i] = ht2.info[i]; } CurrentSize = ht2.CurrentSize; } return *this; } template<typename E,typename K> bool HashTable<E,K>::Insert(const E &e1) { K k1 = e1; int i = FindPos(k1); if(info[i]!=Active){ ht[i] = e1; info[i] = Active; CurrentSize++; return true; } if(info[i]==Active&&ht[i]==e1){ cout << "已存在些元素不能插入" << endl; return false; } cout << "表已满,不能插入" << endl; return false; } template<typename E,typename K> bool HashTable<E,K>::Remove(const K k1, E &e1) { int i = FindPos(k1); if(info[i]==Active&&ht[i]==e1){ info[i]=Deleted; CurrentSize--; return true; } return false; } #endif // HASHTABLE_H
发表评论
-
时间复杂度推导
2012-06-05 22:57 9821.用常数1取代运行时间中的所有加法常数 2.在修改后的运行次 ... -
数据结构概论2
2012-06-04 22:19 807数据元素:组成数据的,有一定意义的基本单位,在计算机中通常作为 ... -
排序概念
2011-06-24 14:51 786数据表:待排序数据元素的有很集合 排序码:通常数据元素有多个 ... -
图的基本概念
2011-06-20 16:18 748完全图:n个顶点,n*(n-1)/2个边的无向图,就是无向完全 ... -
红黑树
2011-06-16 14:29 513红黑树: 1.根结点和所有的叶结点都是黑色 2.从根结点到叶结 ... -
链表反转
2011-06-12 18:03 1100template<typename T> v ... -
跳 表
2011-06-08 11:12 804#ifndef SKIPLIST_H #define S ... -
字 典
2011-06-08 10:06 924字典:以集合为基础,并支持支持Member,Insert和Re ... -
LinkedSet
2011-06-07 13:08 924改了很久的bug #ifndef LINKEDSET_H ... -
bitset
2011-06-06 12:27 884bitSet.h #ifndef BITSET_H #d ... -
Huffman树
2011-06-02 11:06 912Huffman树,又称最优二叉树,是一类加权路径长度最短的二叉 ... -
堆
2011-06-02 09:19 950在优先级队列的各种实现中,堆是最高效的一种数据结构 关键码: ... -
森 林
2011-06-01 11:09 598森林与二叉树互转,主要是子结点转左子树,兄弟结点转右子树 深 ... -
二叉树的链式实现
2011-05-31 11:24 1264binaryTree.h #ifndef LINKEDBI ... -
二叉树基本概念
2011-05-30 10:05 842一棵二叉树的结点的一个有限集合:该集合或者为空,或者是由一个根 ... -
树基本概念
2011-05-30 09:28 892结点(node):包含数据项及指向其他结点的分支。 结点的度( ... -
广义表
2011-05-27 10:57 935广义表的定义是递归的,因为在表的描述中又用到了表,允许表中有表 ... -
矩阵相关
2011-05-26 10:22 931矩阵:是一个具有m行n列的二维数组。 上三角矩阵:只存储对角 ... -
优先级队列
2011-05-21 11:24 601PQueue.h #ifndef PQUEUE_H #d ... -
链式队列
2011-05-20 12:05 828LinkedQueue.h #ifndef LINKEDQ ...
相关推荐
在C语言或C++中,掌握散列表哈希表的设计是提升编程能力的重要环节。本篇文章将深入探讨散列表哈希表的基本概念、工作原理以及如何使用C或C++实现。 一、散列表哈希表基础 1. 哈希函数:哈希函数是散列表的核心,...
### 散列表(哈希表,线性探测再散列) #### 1. 散列表概念 散列表,又称哈希表,是一种基于数组结构的数据结构。它通过哈希函数将一组关键字映射到一个有限的连续地址集(即数组索引范围),并将这些关键字作为...
散列表与哈希表的设计报告 散列表是一种常用的数据结构,用于存储和查找数据。散列表的设计包括散列函数的构造、冲突的处理、哈希表的建立、查找和显示等几个方面。在本报告中,我们将详细介绍散列表的设计思想和...
哈希表,又称散列表,是一种高效的数据存储和查找结构,其主要原理是通过散列函数将关键码值(Key value)映射到一个固定大小的数组中的特定位置,从而实现快速访问。这个映射过程使得我们可以直接根据键(Key)来...
### 散列表(哈希表)深度解析 #### 基础定义与核心价值 散列表,又称为哈希表,是一种高效的数据结构,其设计初衷在于通过关键码值(Key value)直接访问数据,从而极大提升数据检索速度。哈希表的核心在于“散列...
哈希表,也被称为散列表,是计算机科学中一种非常重要的数据结构,它提供了一种高效的数据存储和检索方法。哈希表通过将键(Key)映射到一个索引位置来实现快速访问,这个索引位置是通过哈希函数计算得出的。哈希...
哈希表,也称为散列表,是一种数据结构,它通过使用哈希函数将关键字映射到存储地址,从而实现高效的数据查找。哈希函数是关键所在,它将输入的关键字转换为存储位置,通常表示为 d = H(key)。哈希表本身是一个数组...
哈希表的设计与实现。设计哈希表实现电话号码查询系统。基本要求:(1)设每个记录有一列数据项:电话号码、用户名、地址(2)从键盘输入各记录,分别以电话号码和用户名为关键字建立哈希表;(3)采用再哈希法解决...
从键盘输入各图书相关信息,分别以图书编号为关键字建立散列表。待填入哈希表的书号至少30个;构造合适的哈希函数。 (1)记录由外部输入。 (2)生成的哈希表结果以图形示意形式输出。 (3)分别采用线性法、随机法...
哈希表是一种高效的数据结构,它通过特定的哈希函数将键(key)映射到一个固定大小的数组中,以此实现快速的插入、查找和删除操作。在本设计中,哈希表被用于存储和查询电话通讯信息,包括电话号码、用户名和地址等...
哈希表,也被称为散列表,是数据结构中一种高效的数据存储方式,它通过特定的哈希函数将关键字映射到一个固定大小的数组中,从而实现快速的查找、插入和删除操作。在计算机科学中,哈希表的性能优势在于它的平均时间...
哈希表是一种高效的数据结构,它通过特定的算法——哈希函数,将任意大小的键(key)映射到一个固定大小的数组索引上,从而实现快速的查找、插入和删除操作。在C语言中,哈希表的实现通常需要自定义数据结构和哈希...
这个PPT讲了哈希表的基本原理和应用,还有字符串匹配的应用。
哈希表是一种高效的数据结构,它通过特定的哈希函数将键(Key)映射到一个固定大小的数组中,以此实现快速的查找、插入和删除操作。在数据结构领域,哈希表是解决查找问题的重要工具,尤其适用于大数据量且需要频繁...
用哈希表对较大文件的单词进行排序 结果输出到一个txt文件里 出现次数不一样按出现次数排序 出现次数一样按字典顺序排序
哈希表,也被称为散列表,是计算机科学中一种高效的数据结构,用于存储和检索数据。它通过将关键字(key)映射到一个特定的位置来实现快速访问,这个位置称为哈希码或哈希值。哈希表的核心原理是利用哈希函数将...
哈希表,也被称为散列表,是数据结构中一种高效的数据存储和检索工具。它通过哈希函数将数据的关键字映射到一个固定大小的数组中,使得在平均情况下,查找、插入和删除操作的时间复杂度可以达到O(1)。这种高效的性能...
哈希表,又称为散列表,是数据结构中一种高效的数据存储方式,它通过特定的哈希函数将关键字(key)映射到一个固定大小的数组(也称为哈希表或槽位)中,以此实现快速查找、插入和删除操作。在浙大的这组经典数据...
设计散列表实现手机号码查找系统,对手机号码进行Hash。 [基本要求] (1) 设每个记录有下列数据项:手机号码、姓名、性别、E-mail地址。 (2) 从文件读入各记录,以手机号码为关键字建立散列表(长度为43)。...