15-B. DS哈希查找—线性探测再散列

实验15-哈希查找与排序
题目描述
定义哈希函数为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;

class Hash
{
   
   
    int *T;//哈希表
    int m;//表长
    int n;//关键字数
public:
    Hash(int v1,int v2){
   
   m=v1;T=new int[m];n=v2;}
    void createhash()
    {
   
   
        int i,e;
        for(i=0;i<m;i
### 数据结构中的哈希查找实现 #### 线性探测再散列方法概述 在线性探测再散列中,当发生冲突时,通过顺序地寻找下一个可用位置来解决冲突。具体来说,如果计算得到的位置已经被占用,则继续向后探查直到找到一个空位为止。 对于给定的关键字集合以及定义好的哈希函数 \( H(\text{key}) = \text{key} \% 11 \)[^1],可以按照如下方式创建并操作哈希表: - **初始化**: 创建长度至少为11的数组作为哈希表。 - **插入关键字**: - 对于每一个待插入的关键字,先利用上述哈希函数求得其对应的索引值。 - 如果该索引处为空,则直接存入;如果不为空则采用线性探测法依次检查后续位置直至发现空闲槽位。 ```python def insert_hash_table(hash_table, key): index = key % len(hash_table) while hash_table[index] is not None and hash_table[index] != 'NULL': # Linear probing to find next available slot index = (index + 1) % len(hash_table) hash_table[index] = key hash_size = 17 # Choose a prime number larger than the maximum expected keys count hash_table = ['NULL'] * hash_size keys_to_insert = [22, 30, 33, 14, 4, 15, 19, 8, 21, 9] for key in keys_to_insert: insert_hash_table(hash_table, key) print("Hash Table after insertion:", hash_table) ``` 此代码片段展示了如何基于指定规则建立哈希表,并处理可能发生的碰撞情况。 #### 查找过程说明 为了在一个已经构建完成的哈希表里定位某个特定关键字,同样遵循相同的逻辑路径去遍历各个候选位置: - 使用同样的哈希算法获取初始地址; - 若遇到匹配项即返回成功结果; - 否则沿用之前提到过的线性探测策略逐步前进,直到要么命中目标要么确认不存在这样的记录为止。 这种技术有效地提高了空间利用率的同时也简化了编程模型,在实际应用中有广泛的应用场景[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值