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

news2025/9/20 17:19:54

一、前言:

  这是怀化学院的: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.coloradmin.cn/o/1278092.html

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

相关文章

7.C转python

1.对字典的各种操作都是对键来进行的 2.关于字典的遍历操作 例: 还可以这样遍历 所以生成了一个固定模版来遍历字典: 例: 那两个名字可以换 例: 3.合法key的类型: 要求可哈希 在python中,专门提供了一个hash()函数来计算哈希值 例: 有的类型是不能计算哈希的,如:列表,字…

YOLOv8界面-目标检测+语义分割+追踪+姿态识别(姿态估计)+界面DeepSort/ByteTrack-PyQt-GUI

YOLOv8-DeepSort/ByteTrack-PyQt-GUI&#xff1a;全面解决方案&#xff0c;涵盖目标检测、跟踪和人体姿态估计 YOLOv8-DeepSort/ByteTrack-PyQt-GUI是一个多功能图形用户界面&#xff0c;旨在充分发挥YOLOv8在目标检测/跟踪和人体姿态估计/跟踪方面的能力&#xff0c;与图像、…

腾讯云云服务器功能与优势

腾讯云云服务器&#xff08;Cloud Virtual Machine&#xff0c;CVM&#xff09;是腾讯云提供的可扩展的计算服务。使用云服务器 CVM 避免了使用传统服务器时需要预估资源用量及前期投入的问题&#xff0c;帮助您在短时间内快速启动任意数量的云服务器并及时部署应用程序。 云服…

在 AlmaLinux9 上安装Oracle Database 23c

在 AlmaLinux9 上安装Oracle Database 23c 0. 下载 Oracle Database 23c 安装文件1. 安装 Oracle Database 23c3. 连接 Oracle Database 23c4. &#xff08;谨慎&#xff09;卸载 Oracle Database 23c 0. 下载 Oracle Database 23c 安装文件 版权问题&#xff0c;下载地址请等待…

ASP.NET版本WOL服务的使用

本文以WOL为例&#xff0c;演示如何通过 GPT-4 让其为 WebAPI 项目设计一个网页。其中介绍了如何让GPT4生成相关功能&#xff0c;添加动画效果&#xff0c;接口鉴权等。 1. 背景 前面我们已经完成了一个WOL服务的开发&#xff0c;并将其迁移改造为了 ASP.NET 服务并完成了部署…

电脑提示mfc100u.dll缺失如何解决?分享有效的5个解决方法

由于各种原因&#xff0c;电脑可能会出现一些问题&#xff0c;其中之一就是电脑提示mfc100u.dll的错误。这个问题可能会导致电脑无法正常运行某些程序或功能。为了解决这个问题&#xff0c;我将分享验证有效的五个修复方法&#xff0c;帮助大家恢复电脑的正常运行。 首先&#…

【spring(六)】WebSocket网络传输协议

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 核心概要&#xff1a; 概念介绍&#xff1a; 对比HTTP协议&#xff1a;⭐ WebSocket入门案例&#xff1a;⭐ 核心概要&#xff1a; websocket对比http 概念介绍&#xff1a; WebSocket是Web服务器的一个组件…

一、服务器准备

本案例使用VMware Workstation Pro虚拟机创建虚拟服务器来搭建Linux服务器集群&#xff0c;所用软件及版本如下&#xff1a; Centos7.7-64bit 1、三台虚拟机创建 第一种方式&#xff1a;通过iso镜像文件来进行安装(不推荐) 第二种方式&#xff1a;直接复制安装好的虚拟机文…

CAP BASE理论

CAP & BASE理论详解 CAP 理论 简介 CAP 也就是 Consistency&#xff08;一致性&#xff09;、Availability&#xff08;可用性&#xff09;、Partition Tolerance&#xff08;分区容错性&#xff09; 这三个单词首字母组合。 CAP 理论的提出者布鲁尔在提出 CAP 猜想的时…

LZW的编码和解码

不同于哈弗曼编码针对于每个元素编码&#xff0c;LZW主要针对字符串的编码优化&#xff0c;也就是把出现频率高的字符串压缩成一个字符表示&#xff0c;这也是大名鼎鼎的GIF采用的压缩格式。下面我将从三个角度谈谈我的一些理解&#xff0c;文章主要参考了这位大佬&#xff1a;…

灯光开不了了,是不是NVIDIA的问题

如果你跟我一样灯光亮度调节不了了&#xff0c;然后显示适配器又没有了&#xff0c;你看一下是不是和我这个大怨种一样把NVIDIA卸了&#xff0c;为了这个东西&#xff0c;这屏幕亮瞎我的眼镜&#x1f622;&#x1f622;。只需要进入官网&#xff0c;你就可以直接找到&#xff0…

浅析SD-WAN企业组网部署中简化网络运维的关键技术

网络已经成为现代企业不可或缺的基础设施&#xff0c;它为企业提供了连接全球的桥梁。随着全球化和数字化转型的加速推进&#xff0c;企业面临着越来越多的网络挑战和压力。传统的网络组网方式往往无法满足企业规模扩大、分支机构增多、上云服务等需求&#xff0c;导致网络性能…

005、简单页面-容器组件

之——布局 目录 之——布局 杂谈 正文 1.布局基础知识 2.Column 3.Row 4.实践 杂谈 布局容器组件。 一个丰富的页面需要很多组件组成&#xff0c;那么&#xff0c;我们如何才能让这些组件有条不紊地在页面上布局呢&#xff1f;这就需要借助容器组件来实现。 容器组件是…

深入理解Servlet(中)

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 上篇有一张图&#xff…

Istio可观测性

Istio可观测性 image-20231129072302901 前言 Istio 为网格内所有的服务通信生成详细的遥测数据。这种遥测技术提供了服务行为的可观测性&#xff0c;使运维人员能够排查故障、维护和优化应用程序&#xff0c;而不会给开发人员带来其他额外的负担。通过 Istio&#xff0c;运维…

(C语言)找出1-99之间的全部同构数

同构数&#xff1a;它出现在平方数的右边。例&#xff1a;5是25右边的数&#xff0c;25是625右边的数&#xff0c;即5和25均是同构数。 #include<stdio.h> int main() {for(int i 1;i < 100;i ){if((i*i % 10 i) || (i*i % 100 i))printf("%d\t%d\n",i,…

随堂复习(异常处理、多线程)

第09章&#xff1a;随堂复习&#xff08;异常处理&#xff09; 一、随堂复习 1. 异常的概述 1. 什么是异常&#xff1f; 指的是程序在执行过程中&#xff0c;出现的非正常情况&#xff0c;如果不处理最终会导致JVM的非正常停止。2. 异常的抛出机制 Java中把不同的异常用不同的…

【文献阅读】Joint Demosaicing and Denoising with Self Guidance

1. 摘要 近年来&#xff0c;一些神经网络在联合去马赛克和去噪(JDD)方面表现出了良好的效果。大多数算法首先将Bayer原始图像分解为四通道RGGB图像&#xff0c;然后将其输入神经网络。这种做法忽略了一个事实&#xff0c;即绿色通道的采样率是红色和蓝色通道的两倍。在本文中&…

【Unity入门】声音组件AudioSource简介及实现声音的近大远小

AudioSource组件 将需要播放声音的物体挂载Audio Listener组件&#xff0c;实现声音的播放 AudioSource组件属性 &#xff08;1&#xff09;AudioClip&#xff08;音频剪辑&#xff09;&#xff1a;指定播放的音频文件。 &#xff08;2&#xff09;Output&#xff08;音频输…

计算机网络扫盲(2)——网络边缘

一、概述 在计算机网络得到术语中&#xff0c;我们把与因特网相连的计算机或其他设备称为端系统&#xff08;或者主机&#xff09;&#xff0c;如下图所示&#xff0c;因为它们位于因特网的边缘&#xff0c;所以被称为端系统。因特网的端系统包括了桌面计算机&#xff…