DS哈希查找—二次探测再散列

该博客介绍了一种使用二次探测再散列构建哈希表的方法,详细阐述了如何通过给定的哈希函数处理关键字集合,并在哈希表中进行查找操作。样例展示了输入和输出格式,包括关键字的插入、查找过程及其对应的比较次数和位置。
摘要由CSDN通过智能技术生成

题目描述

定义哈希函数为H(key) = key%11。输入表长(大于、等于11),输入关键字集合,用二次探测再散列构建哈希表,并查找给定关键字。探测时如遇到已存在于哈希表的相同数字,则新数字不存入。

输入

测试次数t
每组测试数据格式如下:
哈希表长m、关键字个数n
n个关键字
查找次数k
k个待查关键字

输出

对每组测试数据,输出以下信息:
构造的哈希表信息,数组中没有关键字的位置输出NULL
对k个待查关键字,分别输出:
0或1(0—不成功,1—成功)、比较次数、查找成功的位置(从1开始)

样例输入1

1
12 10
22 19 21 8 9 30 33 4 41 13
4
22
15
30
41

样例输出1

22 9 13 NULL 4 41 NULL 30 19 8 21 33
1 1 1
0 3
1 3 8
1 6 6

样例输入2

1
79 79
8 5 26 26 12 12 16 28 13 17 26 16 7 29 27 23 3 29 23 28 21 9 18 19 11 27 0 6 5 10 15 5 8 3 1 20 15 17 19 28 26 7 6 3 7 25 18 2 16 11 22 7 13 10 19 24 7 19 22 4 22 7 9 22 2 2 12 17 12 23 7 8 23 13 12 0 0 22 24
26
17
4
16
24
17
18
5
3
25
17
25
0
9
25
1
1
27
4
5
7
16
29
6
24
14
12

样例输出2

23 12 13 29 26 5 16 28 8 27 17 7 19 9 21 6 18 NULL 20 10 4 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 22 NULL NULL NULL NULL NULL NULL 0 NULL 24 25 15 11 1 2 3
1 4 11
1 8 21
1 2 7
1 7 73
1 4 11
1 6 17
1 1 6
1 5 79
1 7 74
1 4 11
1 7 74
1 7 71
1 4 14
1 7 74
1 5 77
1 5 77
1 4 10
1 8 21
1 1 6
1 4 12
1 2 7
1 5 4
1 6 16
1 7 73
0 9
1 1 2

代码示例

注意下面代码的标注的地方**

#include <iostream>
using namespace std;

#define INITIALIZE -1

class HashTable
{
   
private:
	int size;			// 表长
	int* hashTable;		// 哈希表,用于存值
public:
	HashTable();
	~HashTable();
	int hash(int num);
	void outPut();
	void searchValue(int t);
};

HashTable::HashTable()
{
   
	int n;				// 关键字个数
	cin >> size >> n;
	hashTable = new int[size];
	
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是DS哈希查找-线性探测散列的博客: 哈希表是一种高效的数据结构,它可以在常数时间内完成插入、查找和删除操作。哈希表的核心思想是将关键字映射到一个固定的位置,这个位置就是哈希表中的索引。哈希函数是将关键字映射到索引的函数,它的设计直接影响到哈希表的性能。 线性探测散列是一种解决哈希冲突的方法。当发生哈希冲突时,线性探测散列会尝试在哈希表中寻找下一个可用的位置,直到找到一个空闲位置或者遍历了整个哈希表。具体的实现方式是:如果哈希表中的位置被占用了,就尝试往后找一个空闲位置,直到找到一个空闲位置或者遍历了整个哈希表。如果遍历了整个哈希表还没有找到空闲位置,就需要进行再散列,即重新计算哈希函数并将关键字插入到新的位置。 下面是DS哈希查找-线性探测散列的Python实现代码: ```python class HashTable: def __init__(self, size): self.size = size self.keys = [None] * self.size self.values = [None] * self.size def hash_function(self, key): return key % self.size def rehash(self, old_hash): return (old_hash + 1) % self.size def put(self, key, value): hash_value = self.hash_function(key) if self.keys[hash_value] is None: self.keys[hash_value] = key self.values[hash_value] = value else: if self.keys[hash_value] == key: self.values[hash_value] = value else: next_slot = self.rehash(hash_value) while self.keys[next_slot] is not None and self.keys[next_slot] != key: next_slot = self.rehash(next_slot) if self.keys[next_slot] is None: self.keys[next_slot] = key self.values[next_slot] = value else: self.values[next_slot] = value def get(self, key): start_slot = self.hash_function(key) value = None stop = False found = False position = start_slot while self.keys[position] is not None and not found and not stop: if self.keys[position] == key: found = True value = self.values[position] else: position = self.rehash(position) if position == start_slot: stop = True return value ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值