问题 A: DS哈希查找—线性探测再散列

简介: 问题 A: DS哈希查找—线性探测再散列

文章目录


问题 A: DS哈希查找—线性探测再散列
题目描述
 定义哈希函数为H(key) = key%11,输入表长(大于、等于11)。输入关键字集合,用线性探测再散列构建哈希表,并查找给定关键字。
--程序要求--
若使用C++只能include一个头文件iostream;若使用C语言只能include一个头文件stdio
程序中若include多过一个头文件,不看代码,作0分处理
不允许使用第三方对象或函数实现本题的要求
输入
 测试次数t
每组测试数据为:
哈希表长m、关键字个数n
n个关键字(关键字为互不相同的正整数)
查找次数k
k个待查关键字
输出
对每组测试数据,输出以下信息:
构造的哈希表信息,数组中没有关键字的位置输出NULL
对k个待查关键字,分别输出:0或1(0—不成功,1—成功)、比较次数、查找成功的位置(从1开始)
样例输入
1
12 10
22 19 21 8 9 30 33 4 15 14
4
22
56
30
17
样例输出
22 30 33 14 4 15 NULL NULL 19 8 21 9
1 1 1
0 6
1 6 2
0 1
提示

直奔代码

#include<iostream>
using namespace std;
#define INF -99
int main()
{
    int t;
    cin >> t;
    while( t-- ){
        int m, n;
        cin >> m >> n;
        int * a = new int[m]; 
        for( int i=0; i<m; i++) a[i] = INF;
        // 建表
        while( n-- ){
            int num ; 
            cin >> num;
            int di = 1;
            int h = num%11;
            if(a[h]==INF){
                a[h] = num;
                continue;
            }
            while( true ){
                int temp = (h+di)%m;
                if( a[temp] == INF ){
                    a[temp] = num;
                    break;
                } else{
                     di++;
                }
            }
        }
        for(int i=0; i<m; i++){
            if(a[i] == INF ) cout<<"NULL"<<" ";
            else cout<<a[i]<<" ";
        }
        cout << endl;
        int k;
        cin >> k;
        while(k--) {
             int f;
             cin >> f;
             int h = f%11;
             int times = 1;
             int flag = 0;
             int tf = 0;
             int temp = h;
             /**************
              * 查找分三种情况:
              * 1. 要找的关键字的hash地址为空
              * 2. 要找的关键字的hash地址不为空且等于关键字
              * 3. 要找的关键字的hash地址不为空,也不等于关键字,则进行线性探测
              * 
              * 
              * **********/
             if(a[h]==INF){             // 第一种情况     
                 cout<<0<<" "<<1<<endl;
             }
             else{
                 if( a[h]==f ){         // 第二种情况
                     cout<< 1 << " " << 1 << " " << h+1 <<endl;
                     continue;
                 }
                 while(true){           // 第三种情况
                     int temp = ( h+times ) %m;
                     times++;
                     if( a[temp]==f ){
                         cout<<1<<" "<<times<<" "<<temp+1<<endl;
                         flag = 1;
                         break;
                     }
                     if(a[temp]==INF){
                         break;
                     }
                 }
                 if( flag==0 ){
                     cout<<0<<" "<<times<<endl;
                 }
             }
        }
    }
    return 0;
}
相关文章
|
存储 监控 算法
|
7月前
|
机器学习/深度学习 算法 测试技术
DeepSeek-R1-0528:小更新大升级
今天,DeepSeek R1 开源发布了其“小版本”升级——DeepSeek-R1-0528。
989 23
DeepSeek-R1-0528:小更新大升级
|
Go 开发工具 git
CF+hugo部署要点随记
本文介绍了使用Hugo搭建静态博客的方法,Hugo是一款用Go语言编写的静态站点生成器。文中详细描述了在Windows环境下安装Go、Git和Hugo的步骤,并提供了快速启动指南。此外,还介绍了如何通过Git子模块引入主题,以及如何在本地创建和编辑文章。最后,给出了常用Markdown语法示例,帮助用户轻松撰写博客内容。
574 5
|
7月前
|
测试技术 API 人机交互
如何让 Agent 规划调用工具
本文主要从规划的重要性、工具设计的作用、优化实践、适用场景几个方面讲述在构建多工具智能体(Agent)系统时,通过引入结构化的“思考与规划”工具和合理的提示工程,能够显著提升模型解决问题的效率和效果。
1213 26
如何让 Agent 规划调用工具
|
Java UED Spring
Springboot通过SSE实现实时消息返回
通过Spring Boot实现SSE,可以简单高效地将实时消息推送给客户端。虽然SSE有其限制,但对于许多实时消息推送场景而言,它提供了一种简洁而强大的解决方案。在实际开发中,根据具体需求选择合适的技术,可以提高系统的性能和用户体验。希望本文能帮助你深入理解Spring Boot中SSE的实现和应用。
6241 1
|
存储 缓存 负载均衡
使用一致性哈希让数据均匀分布
使用一致性哈希让数据均匀分布
322 3
|
存储 NoSQL 算法
5)深度解密 Redis 的哈希(Hash)
5)深度解密 Redis 的哈希(Hash)
257 1
|
存储 消息中间件 NoSQL
Redis从入门到精通之底层数据结构基数树和listpacks详解
Redis是一种内存数据库,其高性能的基础来自于其底层的数据结构的设计。在Redis中,数据结构是一种抽象和具体的概念,可以看作是Redis提供的一些操作的实现方式。Redis支持多种数据结构,如字符串、列表、哈希、集合、有序集合等。其中,底层的数据结构包括基数树和listpacks,本文将对这两种数据结构进行详细的介绍。
748 0
Redis从入门到精通之底层数据结构基数树和listpacks详解
|
缓存 负载均衡 算法
C++如何实现一致性算法
一致性哈希是一种用于分布式系统的负载均衡算法,旨在减少服务器增减导致的数据迁移。当有N台服务器时,通过哈希环将请求均匀分布到每台服务器,每台处理N/1的请求。若使用缓存如Redis,可进一步处理高并发场景。算法将哈希值空间视为环形,服务器和请求哈希后定位到环上,按顺时针方向找到第一台服务器作为负载目标。提供的C++代码实现了MD5哈希函数,以及一致性哈希算法的物理节点、虚拟节点和算法本身,以实现节点的添加、删除和请求映射。
204 1
C++如何实现一致性算法
问题 B: DS哈希查找—二次探测再散列(关键字互不相同
问题 B: DS哈希查找—二次探测再散列(关键字互不相同
252 0