C++ 实现哈希表的实例

该散列表的散列函数采用了除法散列函数、乘法散列函数、全域散列函数,每一个槽都是使用有序单向链表实现。
实现代码:
LinkNode.h
#include<iostream>
using namespace std;
class Link;
class LinkNode
{
private:
int key;
LinkNode* next;
friend Link;
public:
LinkNode():key(-1),next(NULL){}
LinkNode(int num):key(num),next(NULL){}
int Getkey()
{
return key;
}
};
Link.h
#include"LinkNode.h"
class Hash;
class Link
{
private:
friend Hash;
LinkNode* head;
int length;
public:
Link():head(NULL),length(0)
{}
Link(LinkNode* node):head(node)
{
length+=1;
}
~Link()
{
MakeEmpty();
}
void MakeEmpty()
{
if(head==NULL)
return ;
LinkNode* p=head;
while(p)
{
head=head->next;
delete p;
p=head;
}
}
int GetLength()
{
return length;
}
void Insert(int num)
{
length++;
LinkNode* p=new LinkNode(num);
if(head==NULL)
{
head=p;
return ;
}
LinkNode* q=head,*t=head->next;
if(q->key>num)
{
head=p;
head->next=q;
return ;
}
while(t)
{
if(t->key>=num)
{
q->next=p;
p->next=t;
return ;
}
else
{
q=t;
t=t->next;
}
}
q->next=p;
}
bool Delete(int num)
{
if(head==NULL)
{
cout<<"the link is empty!"<<endl;
return 0;
}
LinkNode* p=head,*t=head->next;
if(p->key==num)
{
head=head->next;
delete p;
length--;
return 1;
}
while(t)
{
if(t->key==num)
{
p->next=t->next;
delete t;
length--;
return 1;
}
else if(t->key<num)
{
p=t;
t=t->next;
}
}
return 0;
}
int Search(int num)
{
LinkNode* p=head;
while(p)
{
if(p->key==num)
{
return num;
}
else if(p->key<num)
{
p=p->next;
}
else
{
return 0;
}
}
return 0;
}
bool IsEmpty()
{
if(head==NULL)
{
return 1;
}
else
return 0;
}
void Print(int num)
{
if(head==NULL)
{
cout<<"the"<<num<<"th link is null!"<<endl;
}
LinkNode* p=head;
while(p)
{
cout<<p->key<<" ";
p=p->next;
}
cout<<endl;
}
};
Hash.h
Hash表中每一个元素存储一个链表
#include"Link.h"
class Hash
{
private:
Link*Table;
public:
Hash(int num):Table(new Link [num]){}
~Hash()
{
delete [] Table;
}
//除法散列法
int H1(int num,int m)
{
return num%m;
}
//乘法散列法
int H2(int num,float A,int m)
{
float fnum=(float)num;
float re=((fnum*A)-(int)(fnum*A))*m;
return (int)re;
}
//全域散列
int H3(int num,int p,int m)
{
int a,b;
a=rand()%p;
b=rand()%p;
return ((a*num+b)%p)%m;
}
void Insert(int num,int n)
{
int key;
if(n==1)
{
key=H1(num,17);
}
else if(n==2)
{
key=H2(num,0.618033,17);
}
else
{
key=H3(num,701,17);
}
Table[key].Insert(num);
}
bool Delete(int num,int n)
{
int key;
if(n==1)
{
key=H1(num,17);
}
else if(n==2)
{
key=H2(num,0.618033,17);
}
else
{
key=H3(num,701,17);
}
return Table[key].Delete(num);
}
int Search(int num,int n)
{
int key;
if(n==1)
{
key=H1(num,17);
}
else if(n==2)
{
key=H2(num,0.618033,17);
}
else
{
key=H3(num,701,17);
}
if(Table[key].Search(num)!=0)
{
return key+1;
}
else
return -1;
}
void Print(int num)
{
int i;
for(i=0;i<num;i++)
{
if(Table[i].IsEmpty())
continue;
Table[i].Print(i);
}
}
};
main.h
#include"Hash.h"
int main()
{
Hash hash(1000),ha(100),sh(100);
int a[15]={15,6,9,4,7,32,569,419,78,125,635,46,456,16,457};
int i;
for(i=0;i<15;i++)
{
hash.Insert(a[i],1);
}
for(i=0;i<15;i++)
{
ha.Insert(a[i],2);
}
cout<<endl;
for(i=0;i<15;i++)
{
sh.Insert(a[i],3);
}
hash.Print(1000);
cout<<endl;
ha.Print(100);
cout<<endl;
sh.Print(100);
cout<<endl;
cout<<hash.Search(46,1)<<endl;
if(hash.Delete(125,1))
{
cout<<hash.Search(125,1)<<endl;
}
}
以上就是C++实现哈希表的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# C++
# 实现哈希表
# 哈希表的实现实例
# 详解哈希表
# C++数据结构哈希表详解
# C++深入探究哈希表如何封装出unordered_set和unordered_map
# C++哈希表之线性探测法实现详解
# C++中使用哈希表(unordered_map)的一些常用操作方法
# C++基础算法基于哈希表的索引堆变形
# C++ 哈希表的基本用法及说明
# 都是
# 链表
# 如有
# 希望能
# 采用了
# 谢谢大家
# 疑问请
# num
# nbsp
# return
# Getkey
# friend
# key
# NULL
# public
# Hash
# delete
# void
# Insert
# GetLength
相关文章:
阿里云网站制作公司,阿里云快速搭建网站好用吗?
建站主机CVM配置优化、SEO策略与性能提升指南
重庆市网站制作公司,重庆招聘网站哪个好?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
建站之星如何优化SEO以实现高效排名?
三星网站视频制作教程下载,三星w23网页如何全屏?
常州企业网站制作公司,全国继续教育网怎么登录?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
潮流网站制作头像软件下载,适合母子的网名有哪些?
北京企业网站设计制作公司,北京铁路集团官方网站?
香港服务器部署网站为何提示未备案?
C++用Dijkstra(迪杰斯特拉)算法求最短路径
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?
在线制作视频的网站有哪些,电脑如何制作视频短片?
如何高效搭建专业期货交易平台网站?
实现虚拟支付需哪些建站技术支撑?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
建站主机助手选型指南:2025年热门推荐与高效部署技巧
简单实现Android文件上传
建站主机解析:虚拟主机配置与服务器选择指南
如何选择CMS系统实现快速建站与SEO优化?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
黑客如何利用漏洞与弱口令入侵网站服务器?
制作企业网站建设方案,怎样建设一个公司网站?
如何登录建站主机?访问步骤全解析
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
如何确认建站备案号应放置的具体位置?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
如何通过云梦建站系统实现SEO快速优化?
如何用免费手机建站系统零基础打造专业网站?
建站之星安装需要哪些步骤及注意事项?
建站之星导航如何优化提升用户体验?
孙琪峥织梦建站教程如何优化数据库安全?
h5网站制作工具有哪些,h5页面制作工具有哪些?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
网站微信制作软件,如何制作微信链接?
网站制作价目表怎么做,珍爱网婚介费用多少?
C++时间戳转换成日期时间的步骤和示例代码
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
建站VPS配置与SEO优化指南:关键词排名提升策略
建站之星2.7模板:企业网站建设与h5定制设计专题
如何通过wdcp面板快速创建网站?
C#如何在一个XML文件中查找并替换文本内容
建站之星后台密码遗忘或太弱?如何重置与强化?
建站之星24小时客服电话如何获取?
如何在七牛云存储上搭建网站并设置自定义域名?
建站主机类型有哪些?如何正确选型
建站之星如何快速生成多端适配网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。