全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++语言实现hash表详解及实例代码

C++语言实现hash表详解

概要:

 hash表,有时候也被称为散列表。个人认为,hash表是介于链表和二叉树之间的一种中间结构。链表使用十分方便,但是数据查找十分麻烦;二叉树中的数据严格有序,但是这是以多一个指针作为代价的结果。hash表既满足了数据的查找方便,同时不占用太多的内容空间,使用也十分方便。

    打个比方来说,所有的数据就好像许许多多的书本。如果这些书本是一本一本堆起来的,就好像链表或者线性表一样,整个数据会显得非常的无序和凌乱,在你找到自己需要的书之前,你要经历许多的查询过程;而如果你对所有的书本进行编号,并且把这些书本按次序进行排列的话,那么如果你要寻找的书本编号是n,那么经过二分查找,你很快就会找到自己需要的书本;但是如果你每一个种类的书本都不是很多,那么你就可以对这些书本进行归类,哪些是文学类,哪些是艺术类,哪些是工科的,哪些是理科的,你只要对这些书本进行简单的归类,那么寻找一本书也会变得非常简单,比如说如果你要找的书是计算机方面的书,那么你就会到工科一类当中去寻找,这样查找起来也会显得麻烦。

    不知道这样举例你清楚了没有,上面提到的归类方法其实就是hash表的本质。下面我们可以写一个简单的hash操作代码。

    a)定义hash表和基本数据节点

typedef struct _NODE 
{ 
  int data; 
  struct _NODE* next; 
}NODE; 
 
typedef struct _HASH_TABLE 
{ 
  NODE* value[10]; 
}HASH_TABLE; 

    b)创建hash表

HASH_TABLE* create_hash_table() 
{ 
  HASH_TABLE* pHashTbl = (HASH_TABLE*)malloc(sizeof(HASH_TABLE)); 
  memset(pHashTbl, 0, sizeof(HASH_TABLE)); 
  return pHashTbl; 
} 

    c)在hash表当中寻找数据

NODE* find_data_in_hash(HASH_TABLE* pHashTbl, int data) 
{ 
  NODE* pNode; 
  if(NULL == pHashTbl) 
    return NULL; 
 
  if(NULL == (pNode = pHashTbl->value[data % 10])) 
    return NULL; 
 
  while(pNode){ 
    if(data == pNode->data) 
      return pNode; 
    pNode = pNode->next; 
  } 
  return NULL; 
} 

    d)在hash表当中插入数据

STATUS insert_data_into_hash(HASH_TABLE* pHashTbl, int data) 
{ 
  NODE* pNode; 
  if(NULL == pHashTbl) 
    return FALSE; 
 
  if(NULL == pHashTbl->value[data % 10]){ 
    pNode = (NODE*)malloc(sizeof(NODE)); 
    memset(pNode, 0, sizeof(NODE)); 
    pNode->data = data; 
    pHashTbl->value[data % 10] = pNode; 
    return TRUE; 
  } 
 
  if(NULL != find_data_in_hash(pHashTbl, data)) 
    return FALSE; 
 
  pNode = pHashTbl->value[data % 10]; 
  while(NULL != pNode->next) 
    pNode = pNode->next; 
 
  pNode->next = (NODE*)malloc(sizeof(NODE)); 
  memset(pNode->next, 0, sizeof(NODE)); 
  pNode->next->data = data; 
  return TRUE; 
} 

    e)从hash表中删除数据

STATUS delete_data_from_hash(HASH_TABLE* pHashTbl, int data) 
{ 
  NODE* pHead; 
  NODE* pNode; 
  if(NULL == pHashTbl || NULL == pHashTbl->value[data % 10]) 
    return FALSE; 
 
  if(NULL == (pNode = find_data_in_hash(pHashTbl, data))) 
    return FALSE; 
 
  if(pNode == pHashTbl->value[data % 10]){ 
    pHashTbl->value[data % 10] = pNode->next; 
    goto final; 
  } 
 
  pHead = pHashTbl->value[data % 10]; 
  while(pNode != pHead ->next) 
    pHead = pHead->next; 
  pHead->next = pNode->next; 
 
final: 
  free(pNode); 
  return TRUE; 
} 

总结:

    1、hash表不复杂,我们在开发中也经常使用,建议朋友们好好掌握;

    2、hash表可以和二叉树形成复合结构,至于为什么,建议朋友们好好思考一下?

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# C++语言实现hash表  # C++语言  # hash表如何实现  # C++实现hash表  # C++中hashmap的一些使用建议  # opencv3/C++ PHash算法图像检索详解  # C++获取文件哈希值(hash)和获取torrent(bt种子)磁力链接哈希值  # 基于一致性hash算法 C++语言的实现详解  # c++中std::hash以及万能hash的使用方式  # 也会  # 你要  # 朋友们  # 的书  # 链表  # 二叉树  # 这是  # 就会  # 如果你  # 太多  # 就好像  # 一本  # 我们可以  # 希望能  # 你对  # 被称为  # 要对  # 打个  # 中也  # 中去 


相关文章: 深入理解Android中的xmlns:tools属性  无锡营销型网站制作公司,无锡网选车牌流程?  c# 服务器GC和工作站GC的区别和设置  为什么Go需要go mod文件_Go go mod文件作用说明  如何在IIS7中新建站点?详细步骤解析  开封网站制作公司,网络用语开封是什么意思?  建站之星后台密码遗忘如何找回?  高性能网站服务器部署指南:稳定运行与安全配置优化方案  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  php json中文编码为null的解决办法  西安专业网站制作公司有哪些,陕西省建行官方网站?  建站之星如何配置系统实现高效建站?  宝塔面板创建网站无法访问?如何快速排查修复?  ,交易猫的商品怎么发布到网站上去?  建站之星如何防范黑客攻击与数据泄露?  如何零基础在云服务器搭建WordPress站点?  学校免费自助建站系统:智能生成+拖拽设计+多端适配  如何用腾讯建站主机快速创建免费网站?  制作企业网站建设方案,怎样建设一个公司网站?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  网站制作难吗安全吗,做一个网站需要多久时间?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  建站之星如何实现网站加密操作?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  如何选择CMS系统实现快速建站与SEO优化?  一键网站制作软件,义乌购一件代发流程?  昆明高端网站制作公司,昆明公租房申请网上登录入口?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  网站插件制作软件免费下载,网页视频怎么下到本地插件?  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  如何通过商城免费建站系统源码自定义网站主题?  h5网站制作工具有哪些,h5页面制作工具有哪些?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  制作网页的网站有哪些,电脑上怎么做网页?  如何用PHP工具快速搭建高效网站?  网站制作壁纸教程视频,电脑壁纸网站?  建站主机与虚拟主机有何区别?如何选择最优方案?  如何在Windows环境下新建FTP站点并设置权限?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  如何快速搭建自助建站会员专属系统?  建站VPS推荐:2025年高性能服务器配置指南  建站之星IIS配置教程:代码生成技巧与站点搭建指南  如何在万网主机上快速搭建网站?  C#如何在一个XML文件中查找并替换文本内容  制作网站怎么制作,*游戏网站怎么搭建? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。