Day16:hash表
一、基础概念
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表相关推荐
- 从头到尾彻底解析Hash表算法
从头到尾彻底解析Hash表算法 发布时间: 2013-10-02 10:26 阅读: 25156 次 推荐: 14 原文链接 [收藏] 作者:July.wuliming.pkuoliv ...
- 0x14.基础数据结构 — hash表与字符串hash
目录 一.Hash表 1.AcWing 137. 雪花雪花雪花 0.hash表+链表 1.字符串的最小表示法 二.字符串hashhashhash 0.AcWing 138. 兔子与兔子 1.luogu ...
- 一步一步写算法(之hash表)
[ 声明:版权全部,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] hash表,有时候也被称为散列表.个人觉得,hash表是介于链表和二叉树之间的一种中间结构.链 ...
- 转 从头到尾彻底解析Hash表算法
出处:http://blog.csdn.net/v_JULY_v. 说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解:第二部分为关于Hash表算法的详细阐述:第三部 ...
- C++实现Hash表
C++实现Hash表的插入,删除,重建开放寻址法 #include<iostream> using namespace std; typedef int KeyType; / ...
- hash表建立 很久没写数据结构了
/** auhtor:lx date 4.9 2011 brief hash table */ #include <stdio.h> #include <stdlib.h> # ...
- libevent中的hash表
libevent中的hash表的代码在ht-internal文件中,在添加io事件,signal事件时,底层是在操作 event_io_map和event_signal_map 1. hash的 ...
- nginx的hash表结构
前言 ngx中的hash表有两种,一种是常规的hash表,另外一种是带有通配符的hash表(其中包含前缀通配符和后经通配符).而带通配符的hash表是基于常规hash表建立的. ngx_hash_t是 ...
- 海量路由表能够使用HASH表存储吗-HASH查找和TRIE树查找
千万别! 非常多人这样说,也包括我. Linux内核早就把HASH路由表去掉了.如今就仅仅剩下TRIE了,只是我还是希望就这两种数据结构展开一些形而上的讨论. 1.hash和trie/radix ha ...
最新文章
- autolayout autoresizing
- MyBatis关联查询、多条件查询
- 开发日记-20190911 关键词 C代码实现shell ftw命令
- Facebook开源Horizon:首个用于大规模产品和服务的强化学习平台
- smart700iev3 程序下载设置_分享一款Aira2下载工具
- 【渗透测试】XSS注入原理
- 获取指定路径下所有PDF文件的总页数
- 手把手教你怎么给客群分级(上)
- WebStorm 6.0下运行pomelo项目
- MATLAB表上作业法解决运输问题
- 12f的接线 esp8266_ESP8266固件升级方法(ESP8266-12F模组)
- Ruby 从入门到掌握视频教程(31 个视频)
- 偶极子天线馈电及倒V天线
- python求学生成绩平均值_python 计算student_grade.txt 中 语文成绩的平均值, 找出数学成绩最高的学生是谁...
- Base64和Base64URL加解密
- 计算机专业生看过来,程序员普遍薪资待遇怎么样?10K仅是起点!
- VS2010编译静态链接MFC的OCX遇到的问题:nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12 已经在 LIBCMTD.lib(dllm
- office安装包百度云
- 统一门户:基于网关的统一用户认证方案
- 清华周界详解《基于图神经网络的事实验证》 | 百万人学AI
热门文章
- 最新版NASA官方网站数据下载流程——以MODIS数据演示为例
- Mendix低代码平台,唯快不破
- 通过加速计和地磁传感器实现方位角
- 今天14:00 | NeurIPS 专场六 青年科学家专场
- SAR ADC设计——SAR Logic原理
- windows如何使用本机电脑远程桌面连接另一台电脑
- Netty框架之Selector轮询器
- 开始CentOS世界 从yum搭建lnmp环境开始,root的密码破解,定时任务, 后续其他功能 redHat5.4
- linux图片格式转换工具,在Linux系统上安装和使用Converseen批量图像转换器的方法...
- 电信isag接口java_使用ag-grid进行国际化