一、基础概念

1.hash表:

既是数据结构 又是算法   哈希法  散列表 散列法
        特点:查找效率非常高

2.应用:

编程语言的函数查找、加密解密、非对称加密

任何数据   生成  固定长度的一个串  sha1  md5

3.关键的三要素:

数据范围
        ②合适的hash函数     查找数据的方式    返回数据存放地址
        ③解决冲突的办法
               不同数据 通过第二步的hash函数返回地址相同  要区分存储

二、代码实例:

存储十进制整数:(可能出现的数字0-9999)
    三层数组   利用十进制数每个位上的数在 0-9之间 这种规律

①数据的范围:0-9999

②hash函数:数组下表的映射

③解决冲突的方法:

最后一个节点变成一个链表去存储(依次去遍历即可.)。

可能的冲突是,705和1705的冲突等等类似的

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//解决冲突 用链表
struct Node
{int        data;Node*  pNext;
};//hash表结构
struct HashTable
{Node**** pArr;
};//Node*  arr[10][10][10];Node* createNode(int data);
//初始化hash表
void initHash(HashTable* pHash);
//往hash表中放数据
void push(HashTable* pHash, int data);
//hash函数
Node* findDataFromHash(HashTable* pHash, int data);int main()
{HashTable hash;initHash(&hash);int n;int data;Node* pTemp;while (1){printf("1 - 插入\n");printf("2 - 查找\n");printf("3 - 退出\n");scanf("%d", &n);switch (n){case 1:printf("请输入插入数据:"); scanf("%d", &data);push(&hash, data);printf("插入完毕!\n");break;case 2:printf("请输入查找数据:"); scanf("%d", &data);pTemp = findDataFromHash(&hash, data);if (pTemp){printf("找到了:%d!\n",pTemp->data);}else{printf("木有找到\n");}break;case 3:return 0;break;}}while (1);return 0;
}//往hash表中放数据
void push(HashTable* pHash, int data)
{//1 创建节点Node* pNew = createNode(data);//2 寻址int bai = data / 100 % 10;int shi = data / 10 % 10;int ge = data % 10;Node* pTemp = pHash->pArr[bai][shi][ge];if (pTemp){//3 解决冲突//3.1 找到最后一个节点while (pTemp->pNext) pTemp = pTemp->pNext;//3.2 新节点成为最后一个节点的下一个节点pTemp->pNext = pNew;}else{//本来为空,说明没有数据pHash->pArr[bai][shi][ge] = pNew;}
}//hash函数
Node* findDataFromHash(HashTable* pHash, int data)
{int bai = data / 100 % 10;int shi = data / 10 % 10;int ge = data % 10;Node* pTemp = pHash->pArr[bai][shi][ge];while (pTemp){if (data == pTemp->data) return pTemp;pTemp = pTemp->pNext;}return NULL;
}//初始化hash表
void initHash(HashTable* pHash)
{pHash->pArr = (Node****)malloc(sizeof(Node***)* 10);//第一层for (int i = 0; i < 10; i++){pHash->pArr[i] = (Node***)malloc(sizeof(Node**)* 10);//第二层for (int j = 0; j < 10; j++){pHash->pArr[i][j] = (Node**)malloc(sizeof(Node*)* 10);//第三层memset(pHash->pArr[i][j], 0, sizeof(Node*)* 10);}}
}Node* createNode(int data)
{Node* pNew = (Node*)malloc(sizeof(Node));pNew->data = data;pNew->pNext = NULL;return pNew;
}

Day16:hash表相关推荐

  1. 从头到尾彻底解析Hash表算法

    从头到尾彻底解析Hash表算法 发布时间: 2013-10-02 10:26  阅读: 25156 次  推荐: 14   原文链接   [收藏]   作者:July.wuliming.pkuoliv ...

  2. 0x14.基础数据结构 — hash表与字符串hash

    目录 一.Hash表 1.AcWing 137. 雪花雪花雪花 0.hash表+链表 1.字符串的最小表示法 二.字符串hashhashhash 0.AcWing 138. 兔子与兔子 1.luogu ...

  3. 一步一步写算法(之hash表)

    [ 声明:版权全部,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] hash表,有时候也被称为散列表.个人觉得,hash表是介于链表和二叉树之间的一种中间结构.链 ...

  4. 转 从头到尾彻底解析Hash表算法

    出处:http://blog.csdn.net/v_JULY_v.   说明:本文分为三部分内容,     第一部分为一道百度面试题Top K算法的详解:第二部分为关于Hash表算法的详细阐述:第三部 ...

  5. C++实现Hash表

    C++实现Hash表的插入,删除,重建开放寻址法 #include<iostream>   using namespace std;      typedef int KeyType; / ...

  6. hash表建立 很久没写数据结构了

    /** auhtor:lx date 4.9 2011 brief hash table */ #include <stdio.h> #include <stdlib.h> # ...

  7. libevent中的hash表

    libevent中的hash表的代码在ht-internal文件中,在添加io事件,signal事件时,底层是在操作  event_io_map和event_signal_map 1. hash的 ...

  8. nginx的hash表结构

    前言 ngx中的hash表有两种,一种是常规的hash表,另外一种是带有通配符的hash表(其中包含前缀通配符和后经通配符).而带通配符的hash表是基于常规hash表建立的. ngx_hash_t是 ...

  9. 海量路由表能够使用HASH表存储吗-HASH查找和TRIE树查找

    千万别! 非常多人这样说,也包括我. Linux内核早就把HASH路由表去掉了.如今就仅仅剩下TRIE了,只是我还是希望就这两种数据结构展开一些形而上的讨论. 1.hash和trie/radix ha ...

最新文章

  1. autolayout autoresizing
  2. MyBatis关联查询、多条件查询
  3. 开发日记-20190911 关键词 C代码实现shell ftw命令
  4. Facebook开源Horizon:首个用于大规模产品和服务的强化学习平台
  5. smart700iev3 程序下载设置_分享一款Aira2下载工具
  6. 【渗透测试】XSS注入原理
  7. 获取指定路径下所有PDF文件的总页数
  8. 手把手教你怎么给客群分级(上)
  9. WebStorm 6.0下运行pomelo项目
  10. MATLAB表上作业法解决运输问题
  11. 12f的接线 esp8266_ESP8266固件升级方法(ESP8266-12F模组)
  12. Ruby 从入门到掌握视频教程(31 个视频)
  13. 偶极子天线馈电及倒V天线
  14. python求学生成绩平均值_python 计算student_grade.txt 中 语文成绩的平均值, 找出数学成绩最高的学生是谁...
  15. Base64和Base64URL加解密
  16. 计算机专业生看过来,程序员普遍薪资待遇怎么样?10K仅是起点!
  17. VS2010编译静态链接MFC的OCX遇到的问题:nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12 已经在 LIBCMTD.lib(dllm
  18. office安装包百度云
  19. 统一门户:基于网关的统一用户认证方案
  20. 清华周界详解《基于图神经网络的事实验证》 | 百万人学AI

热门文章

  1. 最新版NASA官方网站数据下载流程——以MODIS数据演示为例
  2. Mendix低代码平台,唯快不破
  3. 通过加速计和地磁传感器实现方位角
  4. 今天14:00 | NeurIPS 专场六 青年科学家专场
  5. SAR ADC设计——SAR Logic原理
  6. windows如何使用本机电脑远程桌面连接另一台电脑
  7. Netty框架之Selector轮询器
  8. 开始CentOS世界 从yum搭建lnmp环境开始,root的密码破解,定时任务, 后续其他功能 redHat5.4
  9. linux图片格式转换工具,在Linux系统上安装和使用Converseen批量图像转换器的方法...
  10. 电信isag接口java_使用ag-grid进行国际化