数据结构和算法(第九章哈希表)
文章目录
- 前言
- 一、哈希表的基本介绍
- 二、哈希表的实际应用场景
- 三、使用哈希表来管理雇员信息
- 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/
数据结构和算法(第九章哈希表)相关推荐
- 数据结构与算法五:哈希表-哈希函数设计原则-哈希冲突解决方案
一.哈希表的定义: 二.哈希表举例: 哈希函数就是映射关系 三.哈希表应用举例: Leetcode上第387题: 思路:通过s.charAt(i)-'a'将字符串中的字符映射成hash表,出现一次,在 ...
- python【数据结构与算法】深入浅出哈希表
哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个映射函数叫做散列 ...
- 【JS数据结构与算法】认识哈希表
目录 一.什么是哈希表? 二.哈希表的优势. 三.哈希表与数组相比较. 四.数据的存储. 方法一:ASCII编码之和 方法二:幂的连乘 五.方法二改进--哈希化 六.解决冲突 一:链地址法(拉链法). ...
- 数据结构与算法笔记:哈希表——力扣389
原题: 给定两个字符串 s 和 t ,它们只包含小写字母.字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母.请找出在 t 中被添加的字母. 思路: 首先咱们抛开编程知识,就当它是咱们日常 ...
- 数据结构与算法——深入理解哈希表
文章目录 哈希表 优点与缺点 哈希化 冲突 基于线性探测的开放地址法 插入 查找 删除 性能问题 基于二次探测的开放地址法 基于再哈希法的开放地址法 链地址法 哈希表实现方法的选择 参考 哈希表 哈希 ...
- 【数据结构与算法篇】 哈希表原理、底层实现剖析
一个在校大二学生,在CSDN记录自我成长!!!最近在自学数据结构和算法时,学到了哈希表,有很多地方都不明白.如何使用哈希表?原理是什么?如何工作的?我们如何设计哈希表?等等,所以就在网络上查了相关博客 ...
- C++(数据结构与算法):30---散列(哈希)表的介绍(散列函数、散列冲突、散列溢出)
一.散列(哈希)介绍 散列使用一个散列函数(也称为哈希函数)把字典的数对映射到一个散列表(也称为哈希表)的具体位置 散列的存储与查找: 查找:如果数对p的关键字是k,散列函数为f,那么在理想的情况下, ...
- 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划 第一节 动 ...
- 复制成绩表计算机专业的表结构,数据结构 数据结构与算法期末实验考试成绩表.doc...
数据结构 数据结构与算法期末实验考试成绩表.doc (2页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 数据结构与算法期末实验考试成绩表 ...
最新文章
- Mybatis 3学习笔记(一)
- STM32移植RT-Thread的串口只能接收一个字节数据的问题
- Unix整理笔记-vi简介-里程碑M8
- 29.怎样扩展现有类功能?
- httpd 分页_更改 Apache httpd.conf 配置文件
- 3详细参数_大疆精灵3值得入手吗?最详细的实测体验,各种参数应有尽有!
- 为nopcommerce自定义用户积分功能(1)
- dotnet new -i Microsoft.Maui.Templates
- lncrnadisease:lncRNA相关疾病数据库
- Spring Boot:The field file exceeds its maximum permitted size of 1048576 bytes.
- pci转并口卡的安装使用
- 如何写出优秀的数据报告分析
- S7-1200PLC 与温控仪表Modbus RTU通信
- Idea将Java文件导出jar包
- 自主研发项目七之学生电子班牌系统
- 我们常说祝你一切顺利,实际上,顺利的状态是危险的,因为顺利意味着怠惰和懒于思考,是会让人失去奋斗的意志,丧失竞争力。
- 二阶混合差分的几种差分格式
- java基于ssm的员工人事工资管理系统
- checksum算法详细的计算方法、实现思路与python校验验证
- C语言:位(bit)与字节(byte)之间的转换
热门文章
- oracle数据库添加空间不足,oracle数据库解决磁盘空间不足问题
- python 不等于None 不等于空_干货 | 健身前后的黄金饮食法则,不懂等于白练!
- go语言 declared and not used
- [PL/SQL] 请教大家一个问题,存储过程中需要几个commit?
- 国外知名网站Stackoverflow 历时两年评选出11本对程序员最有影响力的书籍
- IMEI码一点通;你想知道关于申请、使用TAC/IMEI的问题都在这。
- Modulo operation
- PPT 设置从第二页开始自动编号
- 微海快递单号批量查询 v1.0
- VB.NET实现DirectSound9 (8) 音效控制器