哈希函数

数据结构第7~8章练习答案(PTA) 下面给出了折半查找函数的大部分内容,但缺少了一部分(以下划线____标识出来的部分)。请先将以下代码中画横线的部分补充完整,然后将完整的函数Search_Bin提交系统,完成题目要求的功能。low=1;mid=____;high=____;return 0;ElemType k要搜索的值顺序表中第一个数据元素存储在T.R[1]下面给出了顺序查找函数的大部分内容,但缺少了一部分(以下划线____标识出来的部分)。 阅读详情

设哈希表长为18,哈希函数为: H(k)=k MOD 17 建立对应的哈希表。采用开放地址法中的二次探测再散列解决冲突,完成以下工作:
(1)查找值为x的元素地址(位置)。找不到则输出-1。
(2)删除关键字为t1、t2的元素,再添加关键字为y的元素
(3)输出整个哈希表(用%4d格式,没有数据则输出4个*)

输入格式:
输入分2部分,
第一部分是初始元素个数和序列
第二部分是x、t1、t2、y的值,分3行输入。

输出格式:
输出数据共2行
第一行是x的地址 第二行是最后的哈希表

输入样例:
12
16 74 60 43 54 90 46 31 29 88 77 26
77
77 90
98
输出样例:
8
26******** 54 88**** 74******** 60 43**** 46 29 31**** 16 98

#include<stdio.h>
#include<stdlib.h>

#define HASHSIZE 18
#define NULLKEY -1
typedef struct
{
    int *elem;
    int count;
} HashTable;
int m=1,t=1;
//初始化散列表
int InitHashTable(HashTable &H,int len)
{
    int i;
    H.count=0;
    H.elem=(int*)malloc(HASHSIZE*sizeof(int));
    for(i=0; i<18; i++)
    {
        H.elem[i]=NULLKEY;
    }
    return 1;
}
//散列函数
int Hash(int key)
{
    return key%17;
}
int collision(HashTable &H,int p)
{

    int i;
    int location;
    for(i=1; i<9; i++)
    {
        location=(p+i*i)%18;
        if(H.elem[location]==NULLKEY)
            return location;
        location=p-i*i;
        while(location<0)
            location+=18;
        location=location%18;
        if(H.elem[location]==NULLKEY)
            return location;
    }
    return -1;
}
//插入关键字进散列表
void InsertHash(HashTable &H,int key)
{
    int addr=Hash(key);

    while(H.elem[addr]!=NULLKEY)
    {
        addr=collision(H,addr);

    }
    //printf("%d ",addr);
    H.elem[addr]=key;
    H.count++;
}
//查找指定元素
int SearchHash(HashTable H,int key,int &addr)
{
//    bool flag=0;
//    for(int i=0; i<18; i++)
//    {
//        if(H.elem[i]==key)
//        {
//            flag=1;
//            printf("%d",i);
//            return 0;
//        }
//    }
//    if(!flag)
//        printf("-1");
    addr=Hash(key);
    int p;
    p=addr;
    if(H.elem[addr]!=key&&H.elem[addr]!=NULLKEY)
    {
        int i;
        int location;
    for(i=1; i<9; i++)
    {
        location=(p+i*i)%18;
        if(H.elem[location]==key)
            {
                addr=location;
                //return 1;
            }
        location=p-i*i;
        while(location<0)
            location+=18;
        location=location%18;
        if(H.elem[location]==key)
            {
                addr=location;
                //return 1;
            }
    }
    }
    if(H.elem[addr]==key)
        return 1;
    else
        return 0;
}
void DeleteHash(HashTable &H,int len,int key)
{
    int i;
    for(i=0; i<18; i++)
    {
        if(H.elem[i]==key)
        {
            H.elem[i]=NULLKEY;
            H.count--;
        }
    }
}

int main()
{
    int a[1000];
    HashTable H;
    int i;
    int len;
    scanf("%d",&len);
    InitHashTable(H,len);
    for(i=0; i<len; i++)
        scanf("%d",&a[i]);
    for(i=0; i<len; i++)
    {
        InsertHash(H,a[i]);
    }
    int t;
    scanf("%d",&t);
    int addr;
    int x1,x2;
    scanf("%d%d",&x1,&x2);
    int y;
    scanf("%d",&y);
    if(SearchHash(H,t,addr))
        printf("%d\n",addr);
    else
        printf("-1\n");
    DeleteHash(H,len,x1);
    DeleteHash(H,len,x2);


    InsertHash(H,y);

//    //printf("插入之后的哈希表为:");
    for(i=0; i<18; i++)
    {

        if(H.elem[i]==NULLKEY)
            printf("****");
        else
            printf("%4d",H.elem[i]);

    }
    return 0;

}

牛客网试题+答案分析+大牛面试经验(11) 一、循环队列的存储空间为 Q(1:40) ,初始状态为 front=rear=40 。经过一系列正常的入队与退队操作后, front=rear=15 ,此后又退出一个元素,则循环队列中的元素个数为( )。 A、39,或0且产生下溢错误 B、14 C、40 D、15 答案:A 解析:循环队列是队列的一种顺序存储结构,用队尾指针 rear 指向队列中的队尾元素,用排头指针 front 指向排头元素的前... 阅读详情

相关推荐

区块链与哈希函数

武汉大学《区块链与密码学》课件整理

weixin_62775913的博客 5540

哈希表

哈希表 哈希函数 哈希函数形成的表为哈希表。元素关键字为K,位置为P 基本思想:K和P之间建立对应关系,使得P=f(K);f为哈希函数 哈希冲突:K不同的映射到同一位置 哈希函数构造方法 原则:函数本身便于计算,计算出来的地址分布均匀。减少冲突, 数学分析法 ​ 实现知道关键字集合,且每个关键字的位数比哈希表地址码位数多,可以从关键字中选取特殊的若干位形成哈希地址。 平方取中法 ​ 先平方...

冢狐的私人空间 796

redis中几种哈希函数的研究

redis中几种哈希函数的研究         这段时间一直在研究redis的源码,在研究其字典结构体的实现部分时,遇到了几个陌生的哈希函数。研究了一下才发现这些函数在如今的开源项目中早已得到了广泛的应用,如标准C++库、nginx、Hadoop等等。         于是乎,我对redis中的这几个函数做了点研究,自己琢磨出点东西来,在这里与大家分享一下。我写这篇文章的目的主要是想阐述一下我

jasperlei的进击之旅 1万+

八大数据结构——哈希表(五)

import java.util.Enumeration; import java.util.NoSuchElementException; //哈希表,基于“开放链地址法”的冲突解决方法 public class HashTable<K, V> { // 定义存储容器,表长如果改变,原来的哈希算法也要调整,情况复杂,这里不予考虑,所以表长初始化就不给改变。 private HashNode<K, V>[] array; // 记录已存储元素个数

BaldIsImpossible的博客 919

常用的字符串哈希函数

本文将介绍什么是字符串哈希函数,字符串哈希函数常见用法,以及字符串哈希函数的实现原理和常用算法。

dvlinker的技术专栏 1万+

CSP历年真题201503-1-图像旋转(C/C++)

一、问题描述 旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度。 计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。 输入格式 二、输入格式 输入的第一行包含两个整数n, m,分别表示图像矩阵的行数和列数。 接下来n行每行包含m个整数,表示输入的图像。 三、输出格式 输出m行,每行包含n个整数,表示原始矩阵逆时针旋转90度后的矩阵。 四、...

GTboy100的博客 1670

Hash算法

概述   Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将...

weixin_33979203的博客 306

骨架动作识别新突破:CTR-GCN的通道拓扑优化策略解析

本文深入解析了CTR-GCN在骨架动作识别中的通道拓扑优化策略。通过引入通道级拓扑细化,CTR-GCN克服了传统GCN共享拓扑结构的局限性,显著提升了动作识别的准确率。文章详细介绍了CTR-GCN的三大核心组件设计,包括特征变换模块、通道拓扑建模和通道聚合技术,并提供了实战调参经验和模型压缩技巧,为计算机视觉领域的研究者和开发者提供了有价值的参考。

weixin_27310417的博客 192

哈希函数及哈希函数的特性

哈希函数 以及哈希函数的三个特性 抗碰撞性 隐藏性 谜题友好性

dadenny的博客 4805

scanpy单细胞转录组python教程(四):单样本数据分析之降维聚类及细胞注释

本文介绍了使用scanpy进行单细胞转录组分析的降维聚类和细胞注释流程。首先通过PCA降维并可视化主成分贡献,然后使用不同分辨率参数(0.2-1.0)进行Leiden聚类。通过Wilcoxon检验鉴定marker基因,并基于经典marker基因手动注释细胞类型。最后对低质量细胞群进行过滤,并重新计算邻居图和UMAP可视化。流程中包含PCA方差分析、多分辨率聚类比较、marker基因筛选和基于UMAP的细胞类型可视化等关键步骤,为后续分析奠定基础。

qq_42090739的博客 941

Verilog——反相器

反相器代码: module inv( A, Y );//A,Y是端口 //定义端口属性 input A; output Y; //定义输入输出关系 assign Y=~A;//Y等于A的反 endmodule //inv是module的名字

weixin_41788560的博客 9500

一文读懂哈希函数

哈希函数 哈希函数(Hash):h=H(Data) ##定义 哈希函数H,将可变大小的数据Data作为输入,产生固定长度的h值。 密码学哈希函数,是一个数学函数。哈希函数本身拥有的特征: 1、输入任意性:函数的输入可以是任意大小的数据; 2、输出固定性:函数的输出是一个固定大小的数据; 3、能够进行有效计算:也就是说在一个合理的时间内,能够对输入数据进行运算得出输出。 对于区块链技术以及加密数字货...

BitTribeLab的博客 9624

【YOLO部署Android安卓手机APP】YOLOv8部署到安卓实时目标检测识别——官方/自训练模型YOLOv8人脸/车辆等目标检测(可自定义更换其他目标)

本文首先讲解如何直接使用官方训练好的模型部署到手机APP进行人脸检测,然后讲解如何修改其他目标进行检测,以车辆检测为例进行讲解如何训练自己的模型部署到手机APP。本文为详细设计/配置文档,包含完整所需的环境配置搭建,项目工程配置步骤等,手把手记录使用pycharm和Android studio的工程开发过程,实现YOLO部署到安卓。实战开发,亲测无误。本项目实现了人脸检测和车辆检测,当然,以此你可以按照本项目开发步骤扩展更换为其他目标进行检测,例如更换为车牌、手势、人脸面部活动、人脸表情、火焰烟雾、行人等

嵌入式阿齐Archie 1万+

哈希函数的特征_哈希函数及其特征

哈希函数的特征Prerequisite: Hashing data structure 先决条件: 哈希数据结构 The hash function is the component of hashing that maps the keys to some location in the hash table. As part of the hashing technique, we nee...

5665

手把手教你玩转服务器芯片架构​专栏--​​3.5 实战案例:用SystemC搭建一个多核服务器芯片的NoC模型(含流量分配与延迟仿真)​

通过SystemC搭建多核NoC模型,可深入验证流量分配策略与延迟特性。实际工程中需结合FPGA原型验证(如Xilinx Alveo)进行时序收敛分析,并通过参数化设计适配不同服务器芯片需求。

MHD0815的博客 3043

C#量化交易的市场数据采集与分析:从0到1构建你的‘数据雷达’——对比5大神器,代码实战全解析!

数据是量化交易的‘氧气’,而好的数据采集与分析是你的‘呼吸机’!本文5大神器+代码实战,总有一款适合你!(本文代码均经过测试,但请根据实际需求调整!

java专栏 730

哈希函数学习笔记

哈希函数(Hash Function)是一公开函数,用于将任意长的消息M映射为较短的、固定长 度的一个值H(M),又称为散列函数、杂凑函数.我们称函数值H(M)为哈希值、杂凑值、杂凑码、 或消息摘要。杂凑值是消息中所有比特的函数,因此提供错误检测能力。消息中任何一个比特或者几个比特的改变都会造成杂凑值的改变。总结:密码学上安全的哈希函数H应该包含的性质:①对于任意的消息x,计算H(x)是容易的。②H是单向的③H是强抗碰撞的对于给定的哈希值h,试图找到满足H(x)=h的x。对于m位的哈希值,穷举的规模大约是2

qq_54223524的博客 9966

C#串口通信上位机开发实战:轻松实现硬件控制与数据交互

摘要:本文介绍如何使用C#开发串口通信上位机应用,实现与硬件设备(如传感器、PLC等)的数据交互。文章涵盖串口通信原理、开发环境配置、功能实现(串口连接管理、数据收发、实时显示)及UI设计,重点讲解SerialPort类的应用、多线程数据接收处理和错误优化。通过Windows Forms构建直观界面,帮助开发者快速掌握工业控制和自动化系统中的串口通信技术,为物联网和智能设备开发提供实用解决方案。全文约150字。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 3029

哈希函数(Hash Function)

哈希函数(散列函数)说明应用解释Q:冲突是不是可以避免的?hash函数的构造准则:简单、均匀hash函数的构造方法:处理冲突的方法:参考 说明 散列的概念属于查找,它不以关键字的比较为基本操作,采用直接寻址技术。在理想情况下,查找的期望时间为O(1)。 简单的说,hash函数就是把任意长的输入字符串变化成固定长的输出字符串的一种函数。输出字符串的长度称为hash函数的位数。(下图来源于维基百科) ...

一个机器学习的学习之旅 2万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

密码学(哈希函数)

预处理:填充(若需)并分割输入为固定长度块。处理:逐块压缩,将前一状态与当前块组合。输出转换:直接取最终压缩结果(或进一步处理)。通过迭代设计,即使输入极长,也能高效生成固定长度输出,并累积处理全输入。迭代哈希函数的示例1990年,MD4,由 Rivest 提出。1992年,MD5,对 MD4 的修改,由 Rivest 提出。1993年,SHA(-0),由 NIST 提出作为标准,被采用为 FIPS 180。1995年,SHA-1,对 SHA 的小幅修改,被发布为 FIPS 180-1。

tianyunlinger的博客 2335

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

什么是哈希函数

哈希函数是一种将任意长度的数据(如字符串、文件、图片等)映射为固定长度的输出值的函数,这个输出值称为“哈希值”(hash value)或“摘要”(digest)。h(x)=y其中 x 是输入,h 是哈希函数,y 是输出(固定长度)项目内容定义将任意长度数据映射为固定长度输出的函数特点确定性、固定长度、抗碰撞、不可逆用途密码保护、数据完整性、哈希表、签名、区块链、Git代表算法SHA-256、SHA-3、MD5(不推荐)、SHA-1(不推荐)

王景程的博客 2251

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

哈希函数的性能优化:如何设计一个高质量的哈希函数?

设计一个高效的哈希函数不仅有助于提高数据检索的速度,还有助于保证系统的安全和完整性。在实际应用中,选择合适的哈希算法和参数至关重要,通常需要根据具体的应用场景和需求进行调整。

你若盛开,清风自来 2300

哈希函数——MD5

哈希函数简介 信息安全的核心技术是应用密码技术。密码技术的应用远不止局限于提供机密性服务,密码技术也提供数据完整性服务。密码学上的散列函数(Hash Functions)就是能提供数据完整性保障的一个重要工具。Hash函数常用来构造数据的短“指纹”,消息的发送者使用所有的消息产生一个短“指纹”,并将该短“指纹”与消息一起传输给接收者。即使数据存储在不安全的地方,接收者重新计算数据的指纹,并验证指纹...

圣三一 7593

什么是哈希函数?如何设计一个好的哈希函数?

哈希函数(Hash Function),也称为散列函数,是一种将任意长度的数据映射为固定长度的哈希值的函数。它能够将输入数据转换为一串数字或字母组成的固定长度字符串,这个字符串通常作为数据的指纹或摘要。哈希函数在数据结构(如哈希表)和密码学中有广泛应用,其设计的质量直接影响到哈希表的数据分布和性能。:相同的输入必须产生相同的输出。这意味着如果输入数据不变,哈希函数的输出也必须一致。:计算哈希值的速度应较快,以确保在实际应用中能够迅速完成大量的哈希运算。

破损的天堂鸟博客 2359

C++ 中 自定义哈希函数

哈希表是一种关键的数据结构,广泛用于在计算机科学中管理和访问数据。通过使用哈希函数将数据键转换为数组索引,哈希表允许快速数据访问,通常提供平均常数时间复杂度的插入、查找和删除操作。在C++中,标准库中的`std::unordered_map`和`std::unordered_set`是基于哈希表实现的容器,它们使用哈希函数来优化数据的存储和访问速度。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 1626
上一篇: 快速排序
下一篇: 最短工期
Asssshzy
博客等级 码龄7年 28粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值