文章目录

  • 前言
  • 一、哈希表的基本介绍
  • 二、哈希表的实际应用场景
  • 三、使用哈希表来管理雇员信息
    • 1.分析
    • 2.表示一个雇员的代码
    • 3.EmpLinkedList,表示链表(链表里面存放数据)的代码
    • 4.创建哈希表,用来管理多条链表的代码
    • 5.哈希表小练

前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、哈希表的基本介绍

二、哈希表的实际应用场景

三、使用哈希表来管理雇员信息

1.分析

2.表示一个雇员的代码

代码如下(示例):


class Emp{public int id;public String name;public Emp next;//构造器public Emp(int id,String name){super();this.id=id;this.name=name;}
}

3.EmpLinkedList,表示链表(链表里面存放数据)的代码

代码如下(示例):

class EmpLinkedList{//头指针,指向第一个Emp,因此我们这个链表的head,时直接指向第一个Empprivate Emp head;//默认为空//添加雇员到链表,直接添加到链表的最后即可//当添加雇员时,id是自增长,即id的分配是从小到大public void  add(Emp emp){//如果是添加第一个雇员if(head==null){head=emp;return;}//如果不是第一个雇员,则使用一个辅助的指针,帮助定位到最后Emp curEmp=head;while(true){if(curEmp.next==null){//说明到链表的最后break;}curEmp=curEmp.next;}curEmp.next=emp;}//删除雇员,删除链表节点public void delete(int no){//1,先找到需要删除的这个节点的前一个节点temp//定义一个辅助变量Emp temp=head;boolean flag=false;//表示是否找到待删除节点while(true){if(temp==null){//表示已经到了链表的最后break;}if (head.id==no){head=head.next;return;}if(temp.next.id==no){//找到了待删除节点的前一个节点temp,将其删除flag=true;break;}//如果没有找到最后,就将temp后移,遍历temp=temp.next;}//2,根据newHeroNode的no来修改即可//根据flag判断是否找到要修改的节点if(flag){//找到了,进行删除temp.next=temp.next.next;}else{//没有找到System.out.printf("要删除的节点%d不存在",no);}}//遍历链表的雇员信息public void list(int no){if(head==null){System.out.println("第"+(no+1)+"链表为空~");return;}System.out.print("第"+(no+1)+"链表的信息为:");Emp curEmp=head;while(true){System.out.printf("=> id=%d,name=%s\t\n",curEmp.id,curEmp.name);if(curEmp.next==null){break;}curEmp=curEmp.next;}}//根据id查找雇员public Emp findEmpById(int id){//判断链表是否为空if(head==null){System.out.println("链表为空");return null;}//辅助指针Emp curEmp=head;while(true){if(curEmp.id==id){//找到break;}//退出if(curEmp.next==null){//说明遍历完当前链表没有找到curEmp=null;//否则其就指向最后一个}curEmp=curEmp.next;}return curEmp;}
}

4.创建哈希表,用来管理多条链表的代码

代码如下(示例):

class HashTab{private int size;//表示共有多少条链表private EmpLinkedList[] empLinkedListArray;//构造器public HashTab(int size){this.size=size;//对数组进行初始化empLinkedListArray=new EmpLinkedList[size];//java.lang.NullPointerException//创建链表时,仅仅将外面的数组创建起来啦,里面的链表为空//勿忘:初始每一条链表for(int i=0;i<size;i++){empLinkedListArray[i]=new EmpLinkedList();}}//添加雇员public void add(Emp emp){//根据员工的id,得到该员工应当添加到哪条链表int empLinkedListNo=hashFun(emp.id);//将emp添加到对用的链表中empLinkedListArray[empLinkedListNo].add(emp);}//删除雇员public void delete(int id){//根据员工的id,得到该员工在哪条链表int empLinkedListNo=hashFun(id);//将emp删除empLinkedListArray[empLinkedListNo].delete(id);}//遍历所有的链表,遍历哈希表public void list(){for(int i=0;i<size;i++){empLinkedListArray[i].list(i);}}//根据输入的id,查找雇员public void findEmpById(int id){//使用散列函数确定在哪条链表找int empLinkedListNO=hashFun(id);Emp emp=empLinkedListArray[empLinkedListNO].findEmpById(id);if(emp!=null){System.out.printf("在第%d条链表中找到雇员id=%d\n",(empLinkedListNO+1),id);}else{System.out.println("在哈希表中,没有找到该雇员");}}//来个链表,应该先根据id进行哈希,也就是散开,散列//散列函数,使用简单取模法public int hashFun(int id){return id%size;}
}

5.哈希表小练

https://leetcode-cn.com/problems/design-hashset/submissions/

数据结构和算法(第九章哈希表)相关推荐

  1. 数据结构与算法五:哈希表-哈希函数设计原则-哈希冲突解决方案

    一.哈希表的定义: 二.哈希表举例: 哈希函数就是映射关系 三.哈希表应用举例: Leetcode上第387题: 思路:通过s.charAt(i)-'a'将字符串中的字符映射成hash表,出现一次,在 ...

  2. python【数据结构与算法】深入浅出哈希表

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

  3. 【JS数据结构与算法】认识哈希表

    目录 一.什么是哈希表? 二.哈希表的优势. 三.哈希表与数组相比较. 四.数据的存储. 方法一:ASCII编码之和 方法二:幂的连乘 五.方法二改进--哈希化 六.解决冲突 一:链地址法(拉链法). ...

  4. 数据结构与算法笔记:哈希表——力扣389

    原题: 给定两个字符串 s 和 t ,它们只包含小写字母.字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母.请找出在 t 中被添加的字母. 思路: 首先咱们抛开编程知识,就当它是咱们日常 ...

  5. 数据结构与算法——深入理解哈希表

    文章目录 哈希表 优点与缺点 哈希化 冲突 基于线性探测的开放地址法 插入 查找 删除 性能问题 基于二次探测的开放地址法 基于再哈希法的开放地址法 链地址法 哈希表实现方法的选择 参考 哈希表 哈希 ...

  6. 【数据结构与算法篇】 哈希表原理、底层实现剖析

    一个在校大二学生,在CSDN记录自我成长!!!最近在自学数据结构和算法时,学到了哈希表,有很多地方都不明白.如何使用哈希表?原理是什么?如何工作的?我们如何设计哈希表?等等,所以就在网络上查了相关博客 ...

  7. C++(数据结构与算法):30---散列(哈希)表的介绍(散列函数、散列冲突、散列溢出)

    一.散列(哈希)介绍 散列使用一个散列函数(也称为哈希函数)把字典的数对映射到一个散列表(也称为哈希表)的具体位置 散列的存储与查找: 查找:如果数对p的关键字是k,散列函数为f,那么在理想的情况下, ...

  8. 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划 第一节 动 ...

  9. 复制成绩表计算机专业的表结构,数据结构 数据结构与算法期末实验考试成绩表.doc...

    数据结构 数据结构与算法期末实验考试成绩表.doc (2页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 数据结构与算法期末实验考试成绩表 ...

最新文章

  1. Mybatis 3学习笔记(一)
  2. STM32移植RT-Thread的串口只能接收一个字节数据的问题
  3. Unix整理笔记-vi简介-里程碑M8
  4. 29.怎样扩展现有类功能?
  5. httpd 分页_更改 Apache httpd.conf 配置文件
  6. 3详细参数_大疆精灵3值得入手吗?最详细的实测体验,各种参数应有尽有!
  7. 为nopcommerce自定义用户积分功能(1)
  8. dotnet new -i Microsoft.Maui.Templates
  9. lncrnadisease:lncRNA相关疾病数据库
  10. Spring Boot:The field file exceeds its maximum permitted size of 1048576 bytes.
  11. pci转并口卡的安装使用
  12. 如何写出优秀的数据报告分析
  13. S7-1200PLC 与温控仪表Modbus RTU通信
  14. Idea将Java文件导出jar包
  15. 自主研发项目七之学生电子班牌系统
  16. 我们常说祝你一切顺利,实际上,顺利的状态是危险的,因为顺利意味着怠惰和懒于思考,是会让人失去奋斗的意志,丧失竞争力。
  17. 二阶混合差分的几种差分格式
  18. java基于ssm的员工人事工资管理系统
  19. checksum算法详细的计算方法、实现思路与python校验验证
  20. C语言:位(bit)与字节(byte)之间的转换

热门文章

  1. oracle数据库添加空间不足,oracle数据库解决磁盘空间不足问题
  2. python 不等于None 不等于空_干货 | 健身前后的黄金饮食法则,不懂等于白练!
  3. go语言 declared and not used
  4. [PL/SQL] 请教大家一个问题,存储过程中需要几个commit?
  5. 国外知名网站Stackoverflow 历时两年评选出11本对程序员最有影响力的书籍
  6. IMEI码一点通;你想知道关于申请、使用TAC/IMEI的问题都在这。
  7. Modulo operation
  8. PPT 设置从第二页开始自动编号
  9. 微海快递单号批量查询 v1.0
  10. VB.NET实现DirectSound9 (8) 音效控制器