为了更深的理解哈希算法,自己写了用开放地址法中的线性探查法解决冲突实现哈希表的运算。

/*** Created by lirui on 14-8-13.* 用开放地址法中的线性探查法解决冲突实现哈希表的运算。*/
public class MyHashSearch {public static final int SIZE = 10;public static final int NULLKEY = -1;public static final int DELKEY = -2;public static MyHashTable[] hashTables1 = new MyHashTable[SIZE];// 记录hash表中的数量。public static int count = 0;// 哈希函数  h(key)= key mod ppublic static int hashFunction(int key, int p) {return key % p;}// 解决冲突的函数public static int ConlictFunction(int adress) {return (adress + 1) % SIZE;}/*** @param hashTables* @param p          选择的那个被除数  h(key)= key mod p  h(key)代表地址* @param key        要查的关键字* @return*/public static int searchHT(MyHashTable[] hashTables, int p, int key) {int i = 0, adr;adr = hashFunction(key, p);while (hashTables[adr].key != NULLKEY && hashTables[adr].key != key) {i++;adr = ConlictFunction(adr);}if (hashTables[adr].key == key) {return adr;} else {return -1;}}public static int deleteHT(MyHashTable[] myHashTables, int p, int key) {int adr;adr = searchHT(myHashTables, p, key);if (adr != -1) {myHashTables[adr].key = DELKEY;count--;return 1;} else {return 0;}}// 将key插入到哈希表中public static void insertHT(MyHashTable[] hashTables, int key, int p) {int i, adr;adr = hashFunction(key, p);// 当没有冲突发生的时候if (hashTables[adr].key == NULLKEY || hashTables[adr].key == DELKEY) {hashTables[adr].key = key;hashTables[adr].findcount = 1;} else {// 如果发生了冲突i = 2;adr = ConlictFunction(adr);while (hashTables[adr].key != NULLKEY && hashTables[adr].key != DELKEY) {adr = ConlictFunction(adr);i++;}hashTables[adr].key = key;hashTables[adr].findcount = i;}count++;}/*** @param hashTables* @param x          要存入哈希表中的数组* @param m          哈希表的长度* @param p          哈希参数*/public static void createHT(MyHashTable[] hashTables, int[] x, int m, int p) {int i, length = x.length;for (i = 0; i < m; i++) {hashTables[i].key = NULLKEY;hashTables[i].findcount = 0;}for (i = 0; i < length; i++) {insertHT(hashTables, x[i], p);}}public static void main(String[] args) {MyHashTable[] hashTables1 = MyHashSearch.hashTables1;for (int i = 0; i < MyHashSearch.SIZE; i++) {hashTables1[i] = new MyHashTable();}//int[] x = {2, 49, 303, 100, 30, 1};int[] x = {7, 8, 30, 11, 18, 9 ,14};createHT(hashTables1, x, MyHashSearch.SIZE, 7);for (MyHashTable myHashTable : hashTables1) {System.out.println(myHashTable.key + "  探查次数:" + myHashTable.findcount);}System.out.println(searchHT(hashTables1, 7, 30));System.out.println(count);deleteHT(hashTables1,7,7);System.out.println(count);for (MyHashTable myHashTable : hashTables1) {System.out.println(myHashTable.key + "  探查次数:" + myHashTable.findcount);}}
}class MyHashTable {int key; // 关键字域String info; // 其他数据域int findcount;// 探查次数域MyHashTable() {}MyHashTable(int key, String info, int findcount) {this.key = key;this.info = info;this.findcount = findcount;}
}

用开放地址法中的线性探查法解决冲突实现哈希表的运算相关推荐

  1. 使用散列表进行查找【查找关键词:电话号码,名称】【平方取中法,除留余数法】【开放地址探测法,公共溢出区法】【计算ASL】

    Library import pandas as pd import numpy as np import time 读取数据 df = pd.read_excel('重庆市印刷和记录媒介复制业754 ...

  2. 【LeetCode】【HOT】105. 从前序与中序遍历序列构造二叉树(哈希表+递归)

    [LeetCode][HOT]105. 从前序与中序遍历序列构造二叉树 文章目录 [LeetCode][HOT]105. 从前序与中序遍历序列构造二叉树 package hot;import java ...

  3. flutter dialog中软键盘遮挡解决冲突

    在dialog中代码软键盘冲突的解决方案; 主要价格这行代码: padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.b ...

  4. 【LeetCode笔记】剑指 Offer 03. 数组中重复的数字(Java、哈希表、原地算法)

    文章目录 题目描述 思路 & 代码 二刷 题目描述 倒是和leetcode 287 寻找重复数很像..但是不能使用那道题的快慢指针法(也可能是我太菜了) 重点在于题干的描述[长度为 n 的数组 ...

  5. 哈希表(散列表)—Hash表解决地址冲突 C语言实现

    哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.具体的介绍网上有很详 ...

  6. C++ STL中哈希表 hash_map介绍

    0 为什么需要hash_map 用过map吧?map提供一个很常用的功能,那就是提供key-value的存储和查找功能.例如,我要记录一个人名和相应的存储,而且随时增加,要快速查找和修改: 岳不群-华 ...

  7. 【C++ 包装器类 map】C++ 标准库(std)中的map结构 哈希表(unordered_map)和黑红树(map)教程

    目录标题 1. 哈希表(unordered_map)和黑红树(map)简介以及初始化 1.1 哈希表的基本介绍 1.1.1 哈希表初始化接口示例 1.1.2 哈希表的键值的注意事项 1.1.3 自定义 ...

  8. 一文看懂哈希表并学会使用C++ STL 中的哈希表

        最近在刷题以及做编程练习的作业时经常会用到哈希表,碰到一些想用的函数时每次都看别人的博客,现结合别人的博客对哈希表做个总结. 本篇博客的主要内容如下 1. 哈希表的定义 2. 如何使用STL库 ...

  9. Linux哈希表数组,开地址哈希表(Hash Table)的接口定义与实现分析

    开地址哈希函数的接口定义 基本的操作包括:初始化开地址哈希表.销毁开地址哈希表.插入元素.删除元素.查找元素.获取元素个数. 各种操作的定义如下: ohtbl_init int ohtbl_init ...

最新文章

  1. data lab 1(暂时只放题目)
  2. 修改服务器里的端口,怎么修改windows服务器登陆端口号
  3. 基于Spring Cloud实现微服务前后端系统
  4. MFC多线程各种线程用法 .
  5. .NET Core 2.1预览版首次引入Global Tools
  6. com/fasterxml/jackson/core/exc/InputCoercionException
  7. 《转载》python爬虫实践之模拟登录
  8. 6. wordpress plug-in
  9. Atitit 函数式编程与命令式编程的区别attilax总结  qbf
  10. Java Map 集合实现类
  11. 视频教程-汇编语言程序设计VI-其他
  12. 2020中国数据智能产业图谱1.0版发布丨数据猿产业全景图
  13. 高通QCC5100系列蓝牙音频模块芯片
  14. qq2009 好像和金山词霸屏幕取词有冲突
  15. asp毕业设计——基于asp+access的车辆调度管理系统设计与实现(毕业论文+程序源码)——车辆调度管理系统
  16. 谷歌浏览器扩展程序XDM_这才是谷歌浏览器的正确打开方式,有效节省内存占用,流畅飞起...
  17. Jrebel+springboot2.0 启动失败问题
  18. 1155低功耗cpu排行_1155针可以配那些cpu都列举出来
  19. c语言运算符优先级 从右到左,c语言运算符优先级,结合性(左/右结合详解)
  20. Codevs 2198 数字三角形WWW

热门文章

  1. java maven项目使用sonar审核代码
  2. java学习笔记-java中运算符号的优先顺序
  3. Oracle CDC (Change Data Capture)更新数据捕获——概述
  4. Android UI SurfaceView的使用-绘制组合图型,并使其移动
  5. PARAMETERS 指令
  6. zookeeper学习记录
  7. 调侃 -- 刚入职时的单纯
  8. linux_shell 第一章 变量
  9. 自动挂载配置本地yum源
  10. MYSQL注入天书之数据库增删改介绍