Java数据结构之《哈希查找》题目

一、前言:

  这是怀化学院的:Java数据结构中的一道难度中等的一道编程题(此方法为博主自己研究,问题基本解决,若有bug欢迎下方评论提出意见,我会第一时间改进代码,谢谢!) 后面其他编程题只要我写完,并成功实现,会陆续更新,记得三连哈哈! 所有答案供参考,不是标准答案,是博主自己研究的写法。(这一个题书上也有现成的代码,重要的是理解它的算法原理!)

二、题目要求如下:

(第 1 题) 哈希查找(难度系数75)

哈希查找
标准输入输出
题目描述:
实现哈希查找。要求根据给定的哈希函数进行存储,并查找相应元素的存储位置。本题目使用的哈希函数为除留取余法,即H(key)=key%m,其中m为存储空间,冲突处理方法采用开放定址法中的线性探测再散列,即Hi=(H(key)+i)/%m,0<=i<=m-1。
输入:
输入包含若干个测试用例,第一行为测试用例个数。每个测试用例占3行,第一个为元素个数m,第二行为m个元素值,即需要进行散列存储的元素个数,同时也是存储空间个数(空间位置从0开始存储),第三行为需要查找的元素。
输出:
对每一测试用例,分别用两行输出,第一行输出所有的元素,要求按存储地址从0开始输出,用空格隔开,第二行输出需要查找的元素在数组中的位置,即对应数组中的下标。
输入样例:
1
5
2 4 1 7 9
7
输出样例:
9 1 2 7 4
3

三、代码实现: (代码的做题原理全部在代码注释中,若还有疑问也可以翻书关于哈希查找的内容) 

补充:建议写这到题的同志一定要去了解Java《数据结构》书中的哈希表、哈希函数、以及哈希冲突等等东西,不然会有点找不着头脑的感觉!

(1)全部放在一个Main类里面去实现该题的所有要求:

package com.fs.search01;import java.util.Scanner;public class HashTable {public static void main(String[] args) {Scanner sc =new Scanner(System.in);int k =sc.nextInt();  //需要测试的总次数while (k>0){int m=sc.nextInt(); //本次测试的元素个数int []data = new int[m];int []hashtable = new int[m];  //存算出来的每个数字对于的哈希函数值:依次放入哈希表里的for(int i=0;i<m;i++){data[i]=sc.nextInt();//输入各个元素//题目要求采用的是哈希函数是取余法int num=0;  //这个作用是解决产生的哈希冲突//首先用题目中给的哈希函数:除留取余法( H(key)=key%m )来计算每个数的哈希函数值//但是要解决哈希冲突的问题,就要加一个值// 此处就是解决哈希冲突(采用开放定址法中的线性探测再散列,即Hi=(H(key)+i)/%m,0<=i<=m-1)while(hashtable[(data[i]+num)%m]!=0){  //这里的作用就是:判断当前数算出的哈希值所处的位置:在原有的哈希表里是否已经存放了:其它与它相等哈希值的数,等于0就是代表哈希表当前位置还是初始化的0值num++;}//如果前面while满足,那就是要换哈希表里的其他位置,就要加一个1再取余去算是否在哈希表中还有元素占用了位置,若没有就直接放进哈希表对应的位置hashtable[(data[i]+num)%m]=data[i];}int value=sc.nextInt();  //输入要查的数的值//打印哈希表里从下标0开始的所有元素,和记录它要查的值与哈希表的相等的时候的下标int index = 0;for(int j=0;j<m;j++){System.out.print(hashtable[j]+" ");if(hashtable[j]==value){index=j;  //找到要查找的元素下标}}System.out.println();System.out.print(index);k--;}}
}

 四、不同情况的代码测试运行结果:

<1>首先是题目中的测试输入样例:(最好手打输入测试,直接复制可能格式问题导致报错!)

<2>其他测试:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/191749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT成为“帮凶”:生成虚假数据集支持未知科学假设

ChatGPT 自发布以来&#xff0c;就成为了大家的好帮手&#xff0c;学生党和打工人更是每天都离不开。 然而这次好帮手 ChatGPT 却帮过头了&#xff0c;莫名奇妙的成为了“帮凶”&#xff0c;一位研究人员利用 ChatGPT 创建了虚假的数据集&#xff0c;用来支持未知的科学假设。…

HarmonyOS应用开发——程序框架UIAbility、启动模式与路由跳转

前言 UIAbility简单来说就是一种包含用户界面的应用组件&#xff0c;用于和用户进行交互。每一个UIAbility实例&#xff0c;对应于一个最近任务列表中的任务。 一个应用可以有一个UIAbility&#xff0c;也可以有多个UIAbility。一个UIAbility可以对应于多个页面&#xff0c;建议…

半监督语义分割综述

paper link&#xff1a;https://arxiv.org/pdf/2302.09899.pdf 1. Introduction 图像分割是最古老、研究最广泛的计算机视觉 (CV) 问题之一。图像分割是指将图像划分为不同的非重叠区域&#xff0c;并将相应的标签分配给图像中的每个像素&#xff0c;最终获得ROI区域位置及其类…

线上CPU飙高问题排查!

https://v.douyin.com/iRTqH5ug/ linux top命令 top 命令是 Linux 下一个强大的实用程序&#xff0c;提供了系统资源使用情况的动态、实时概览。它显示了当前正在运行的进程信息&#xff0c;以及有关系统性能和资源利用情况的信息。 以下是 top 命令提供的关键信息的简要概述…

Linux 内核源码各版本下载

下载地址&#xff1a; kernel/git/stable/linux.git - Linux kernel stable treehttps://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/refs/ 1. Linux 内核的基本概念&#xff1a; 内核是什么&#xff1f; 内核是操作系统的核心部分&#xff0c;负责管理系统…

springboot工作原理

Spring Boot 是一个用于创建独立的、基于Spring框架的Java应用程序的开发框架。它简化了Spring应用程序的配置和部署过程&#xff0c;提供了一种快速、方便的方式来构建可扩展的、可部署的应用程序。 Spring Boot 的工作原理可以概括如下&#xff1a; 1. 自动配置&#xff08…

割裂式“多渠道”不是真正的全渠道!浅析全渠道零售和DTC在理念上的不谋而合|徐礼昭

图文&#xff1a;徐礼昭 全渠道零售概念解析 全渠道零售概念由来已久&#xff0c;单纯从业务经营角度&#xff0c;一个品牌在线上线下多个渠道铺货卖货&#xff0c;只能说是多渠道零售&#xff0c;而不是全渠道零售。商派市场负责人徐礼昭认为&#xff0c;品牌企业应该从消费者…

Java JDBC SQLite 示例

SQLite是一个简单、小巧、快速、可靠、无服务器、零配置和无需安装的 SQL 数据库库&#xff0c;它与客户端应用程序在进程中运行。尽管www.sqlite.org没有官方的 JDBC 驱动程序库&#xff0c;但www.xerial.org提供了一个——一个 XML 数据库管理系统项目。 1.下载SQLite JDBC驱…

wpf devexpress 使用IDataErrorInfo实现input验证

此处下载源码 当form初始化显示&#xff0c;Register按钮应该启动和没有输入错误应该显示。如果用户点击注册按钮在特定的输入无效数据&#xff0c;form将显示输入错误和禁用的注册按钮。实现逻辑在标准的IDataErrorInfo接口。请查阅IDataErrorInfo接口&#xff08;System.Com…

Fabric:创建应用通道

搭建自定义网络可以参考文章&#xff1a; https://blog.csdn.net/yeshang_lady/article/details/134113296 1 创建通道 网络搭建完成之后&#xff0c;就可以开始创建通道了。Fabric V2.5.4中可以在不创建系统通道的情况下直接创建应用通道。 1.1 修改配置文件 先创建配置文…

【AIGC】接着昨天的AI“洗图”骚操作,继续调戏国产大模型

目录 一、洗稿&#xff0c;洗图&#xff0c;洗视频 二、如何洗图 2.1 先看看效果 2.2 如何做的 2.3 提示词示例 三、试试星火和通义 2.1 星火和通义的特点 2.2 星火的做图能力理解力强&#xff0c;准确度还有待提高 2.3 通义大模型伺候 2.4 这3个大模型可以配合使用 …

【1day】华天软件 OA ntkodownload接口任意文件读取学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现

结构体||联合体

1.结构体 1.1实际生活中一些东西往往有多个元素组成。如一名学生有身高、体重、名字、学号等。这时候就需要用到结构体。 结构体是一些值的结合&#xff0c;这些值被称为成员变量。结构体的每个成员可以是不同类型的变量&#xff0c;如&#xff1a;标量、数组、指针、甚至是其…

基于模型生成代码(MBD)

基于模型生成代码(MBD) 1、MBD的基本概念 图形化模型:MBD主要使用图形化的方式来表示系统。这些模型可以是控制流程图、状态机、或者其他形式的图形表示,能够清晰地展示系统的行为和逻辑。从概念到实现:在MBD中,整个开发流程从概念设计开始,直至实现和测试,都围绕模型…

基于2D激光雷达匹配的充电桩位姿检测

原理 1. 激光雷达滤波&#xff0c;滤除太远的雷达数据&#xff0c;并降采样 2. 对雷达数据进行分割聚类出candidates 3. 通过策略&#xff0c;过滤掉大部分不符合的candidates 4. 对candidates与充电桩模板数据进行PCA、ICP匹配 5. 选择距离最小或者得分最高的一帧作为输出…

传纸条(算法题)

题目来源 传纸条 题目描述&#xff1a; 小渊和小轩是好朋友也是同班同学&#xff0c;他们在一起总有谈不完的话题。一次素质拓展活动中&#xff0c;班上同学安排做成一个m行n列的矩阵&#xff0c;而小渊和小轩被安排在矩阵对角线的两端&#xff0c;因此&#xff0c;他们就无法…

提高wordpress网站收录速度,设置wp后台的“更新服务”功能

搜索引擎会按照某个规律定期的来抓取网站的内容&#xff0c;其抓取你网站的频率一般和网站的更新速度有关&#xff0c;如果网站内容更新频繁&#xff0c;那么网络蜘蛛也会频繁的访问网站。每天坚持更新文章显然这对一般个人博主来说有难度&#xff0c;另一个方法就是每当我们发…

redis——布隆过滤器

一&#xff1a;布隆过滤器是什么&#xff1f; 由一个初值都为零的bit数组和多个哈希函数构成&#xff0c;用来快速判断集合中是否存在某个元素&#xff0c;不保存数据信息&#xff0c;只是在内存中做一个是否存在的标记 二&#xff1a;布隆过滤器能干什么&#xff1f; 高效…

HTB_Archetype攻击全流程

Archetype (SMB、SQL Server xp_cmdshell、反弹shell、winPEASx64、psexec远程连接) TASK 1 问题: 哪个TCP端口托管着数据库服务器&#xff1f;目的: 识别运行数据库服务的端口&#xff0c;通常通过端口扫描&#xff08;如使用nmap&#xff09;来完成。 TASK 2 问题: 通过S…

滑动平均+TTA

给定一堆二维图像&#xff0c;要拼成三维&#xff0c;然后要在x&#xff0c;y&#xff0c;z上分别预测&#xff0c;预测要预测一个二维patch&#xff0c;还要tta&#xff0c;最后平均结果 import torchM, N, R 40, 40, 4 CUT_SIZE 10 OFFSET 5def get_data():# (M, N) * Rt…