哈希查找实现

哈希查找(数据结构作业),这里只列举了线性探测法,还有二次探测法(左右摆头),链地址法可以自行理解,如有错误请及时指出

/*
第七章查找数据结构作业 
date:2021/12/10
content:哈希查找实现(线性探测法处理冲突)
mind:
1.创建哈希表
2.核心代码是线性探测,向右顺位思想,走到尾无位置,再从头开始顺位 

测试用例为课本232页第5题
散列表的地址范围为0-17,散列函数为H(key)=key%16
已存入关键字序列:(10,24,32,17,31,30,46,47,40,63,49)
直接输入search_key即可查找 
*/
#include <iostream>
using namespace std;
#define len 18
#define m 16

typedef struct{
	int key;
	int compare;
}HashTable;
HashTable a[len];
int data[11]={10,24,32,17,31,30,46,47,40,63,49};
//创建哈希表 
void CreateHash(){
	for(int i=0;i<11;i++){
		int H0 = data[i] % m;
		if(a[H0].key==0){
			a[H0].key=data[i];
			a[H0].compare=1;
		}
		else{
			for(int j=1;j<m;j++){
				int Hj = (H0+j) % len;
				if(a[Hj].key==0){
					a[Hj].key=data[i];
					a[Hj].compare=j+1;		
					break;
				}
			}
		}
	}
}
//哈希查找 
int SearchHash(HashTable HT[len],int search_key){
	int H0 = search_key % m;
	if(HT[H0].key==0) return -1;
	else if(HT[H0].key==search_key) return H0;
	else{
		for(int i=1;i<m;i++){
			int Hi = (H0+i) % len;
			if(HT[Hi].key==0) return -1;
			else if(HT[Hi].key==search_key) return Hi;
		}
		return -1;
	}
}
int main()
{	
	CreateHash();
	int search_key;
	cin>>search_key;
	int b = SearchHash(a,search_key);
	if(b!=-1){
		cout<<"search_key的散列地址为:"<<b<<endl;
		cout<<"查找search_key需要比较次数为:"<<a[b].compare;
	}else{
		cout<<"未查找到该数据";
	}
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值