A : DS哈希查找–链地址法

简介: 这篇文章介绍了如何使用链地址法解决哈希查找中的冲突问题,并通过C++代码示例演示了使用表头插入法构建哈希表并进行数据查找的过程。

A : DS哈希查找–链地址法

Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 13     Solved: 9

Description

给出一个数据序列,建立哈希表,采用求余法作为哈希函数,模数为11,哈希冲突用链地址法和表头插入

如果首次查找失败,就把数据插入到相应的位置中

实现哈希查找功能

Input

第一行输入n,表示有n个数据

第二行输入n个数据,都是自然数且互不相同,数据之间用空格隔开

第三行输入t,表示要查找t个数据

从第四行起,每行输入一个要查找的数据,都是正整数

Output

每行输出对应数据的查找结果

Sample Input

6
11 23 39 48 75 62
6
39
52
52
63
63
52

Sample Output

6 1
error
8 1
error
8 1
8 2

Hint

注意,当两次输入要相同的查找数据,如果第一次查找不成功就会执行插入,那么第二次查找必然成功,且查找次数为1次(因为做表头插入)

例如示例数据中输入两次52,第一次查找失败就把52插入到位置8,第二次查找就成功了,所以第一次输出error,第二次就输出8 1

为什么第三次输入52会输出8 2

ac代码如下:

#include<iostream>
using namespace std;
struct Node //由于哈希冲突用链地址法,所以加入第二个元素Node *next
{
    int data;
    Node *next;
};  
Node *s[11]; //由于求余法作为哈希函数,所以哈希表分配mod11内存
void Hash_add(int key)  //一种常见的表头插入方法
{
    Node *p=new Node;
    p->data=key;
    p->next=s[key%11];
    s[key%11]=p;
}
int main()
{
    int n,key;
    while(cin>>n)
    {
        for(int i=0; i<11; i++)s[i]=NULL; //由于多组样例需要初始化哈希表
        while(n--)  //构建哈希表
        {
            cin>>key;
            Hash_add(key);
        }
        cin>>n;
        while(n--) //n次查询
        {
            cin>>key;
            Node *p=s[key%11]; //找到key对应的链表s
            int num=1;
            while(p) //对链表进行遍历查询
            {
                if(p->data==key)break;
                p=p->next;
                num++;//查询深度
            }
            if(p)cout<<key%11<<" "<<num<<endl;  //如果不是因为到尾NULL结束,输出哈希表链表位置和深度
            else    //否则输出error,并加入哈希表
            {
                cout<<"error"<<endl;
                Hash_add(key);
            }
        }
    }
    return 0;
}
相关文章
|
安全 Java 编译器
多线程(看这一篇就够了,超详细,满满的干货)
多线程(看这一篇就够了,超详细,满满的干货)
698 2
|
安全 Linux 编译器
内存泄漏检测组件的分析与实现(linux c)-mtrace工具使用
内存泄漏产生原因 在堆上使用malloc/remalloc/calloc分配了内存空间,但是没有使用free释放对应的空间。
321 0
|
8月前
|
监控 容器
云效构建在线调试来啦!保留构建现场,高效排查构建问题
阿里云云效「构建在线调试」功能全新上线,助您一键开启 Debug 模式,在线高效调试,轻松解决构建难题!
254 102
|
11月前
|
存储 Prometheus 运维
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案
在云原生环境中,阿里云ARMS与Prometheus的集成提供了强大的应用实时监控解决方案。该集成结合了ARMS的基础设施监控能力和Prometheus的灵活配置及社区支持,实现了全面、精准的系统状态、性能和错误监控,提升了应用的稳定性和管理效率。通过统一的数据视图和高级查询功能,帮助企业有效应对云原生挑战,促进业务的持续发展。
263 3
|
缓存 安全 Linux
|
人工智能 算法 安全
深度讲解-互联网算法备案指南和教程
随着人工智能和大数据技术的发展,互联网算法在内容推荐、用户画像等领域日益重要,但也带来了安全风险和合规挑战。国家互联网信息办公室为此发布了《互联网算法备案管理规定》,要求具有舆论属性或社会动员能力的互联网信息服务提供者进行算法备案,以确保算法透明性和合规性,维护网络健康秩序。唯安创远AI合规专家将解析备案的必要性、流程及其对企业的影响,帮助企业顺利完成备案。
968 3
|
传感器 数据采集 人工智能
【STM32+k210项目】基于AI技术智能语音台灯的设计(完整工程资料源码)
【STM32+k210项目】基于AI技术智能语音台灯的设计(完整工程资料源码)
1090 2
二叉树的中后序遍历构建及求叶子
二叉树的中后序遍历构建及求叶子
237 0
|
人工智能 数据挖掘 数据库
客户在哪儿AI——做真正管用的大客户获客方案
我们的目标是打造高效的ToB大客户获客方案。客户在哪儿AI生成企业全历史行为数据并提供数据分析服务,帮助企业从上帝视角洞察营销。通过真实案例展示,AI能显著提升活动营销效果,例如仅通过10场活动即可触及贡献44.9%营收的客户,30场则可达73.3%,极大提高效率。此外,在决策层和销售工作中,AI发现了某一关键客户与其69.3%营收来源有深层联系,证实了聚焦此客户的战略价值。我们虽不能公开全部细节,但愿与有兴趣者分享真实分析流程。由于服务刚启动,目前尚未有足够反馈,未来将及时分享成果。
|
人工智能 安全 大数据
SDN(软件定义网络)——重塑网络架构的新视角
SDN(软件定义网络)是网络架构革新的关键,通过分离控制与数据平面,实现网络的灵活、高效管理。未来,SDN将更广泛应用于各行业,与云计算、大数据、AI融合,推动数字化转型。开放与标准化的趋势将促进SDN生态发展,提供以业务需求为导向、智能化自动化管理及增强网络安全的新视角。SDN将在更多领域扮演重要角色,支持网络技术的创新与进步。