c++实现哈希查找(散列表)

使用除留余数法构造哈希函数
使用线性探测法来解决冲突

#include<iostream>
using namespace std;
const int MAX = 65535; //设置一个不可能输入的值
 
//建立哈希表
void Creat_HashTable(int *arr, int num)
{
	int x = 0, key = 0; // x 为将要输入的值, key 为键值下标
	//初始化哈希表为MAX
	for (int i = 0; i < num; i++)
	{
		arr[i] = MAX;
	}
	cout << "请输入" << num << "个非零整数:" << endl;
	for (int j = 0; j < num; j++)
	{
		//输入
		cin >> x;
		if (x == MAX)
		{
			//如果输入是MAX,跳出本轮循环进行下一轮循环
			continue;
		}
		else
		{
			//如果不是MAX,在哈希表中找到可存入的下标
			key = x % num;
		}
		while (arr[key] != MAX)
		{
			//如果表中已经有数值存入,循环找到空位
			key = (key + 1) % num;
		}
		//存入
		arr[key] = x;
	}
}

//哈希函数(哈希查找)
void Hash_Search(int *arr, int num, int target)
{
	int key = 0, count = 0;
	//根据建表时的下标找到键值
	key = target % num;
	//如果第一次找不到
	while (arr[key] != target && ++count <= num)
	{
		key = (key + 1) % num;
	}
	if (count > num)
	{
		cout << "找不到!" << endl;
	}
	else
	{
		cout << "找到了!在下标为" << key << "的单元中!" << endl;
	}
}

int main()
{
	int num = 0, target = 0;
	cout << "请输入要建立的序列个数:" << endl;
	cin >> num;
	//动态创建一个哈希表
	int *arr = new int[num];
	Creat_HashTable(arr, num);
	cout << "哈希表为:" << endl;
	for (int i = 0; i < num; i++)
	{
		cout << arr[i] << "\t";
	}
	cout << endl;
	while (target != 65535)
	{
		cout << "请输入要查找的键值:" << endl;
		cin >> target;
		Hash_Search(arr, num, target);
	}
	
	system("pause");
	return 0;
}

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值