【哈希查找】

这篇文章展示了使用C++实现开放地址法哈希表的查找过程,具体采用了线性探测再散列的方法。哈希表的存储结构包含关键字项,哈希函数用于计算地址,SearchHash函数执行查找操作。在主函数中,对预设的哈希表数据进行查找,并允许用户输入数字进行连续查找。
摘要由CSDN通过智能技术生成
#include<iostream>
using namespace std;

//- - - - -开放地址法哈希表的存储表示- - - - -
#define m 16             //哈希表的表长
#define NULLKEY 0     //单元为空的标记

struct HashTable
{
   int  key;		         	 			//关键字项
// InfoType  otherinfo;					//其他数据项
};

//哈希函数 
int H(int key)
{
	int result;
	result=key%13;
	return result;
} 

int SearchHash(HashTable HT[],int key)
{
  //在哈希表HT中查找关键字为key的元素,若查找成功,返回哈希表的单元标号,否则返回-1 
  int H0=H(key);     	                   			//根据哈希函数H(key)计算哈希地址
  int Hi;
  if (HT[H0].key==NULLKEY) return -1;		//若单元H0为空,则所查元素不存在
  else if (HT[H0].key==key) return H0;		//若单元H0中元素的关键字为key,则查找成功
  else{             
     for(int i=1;i<m;++i)
	 {           
		Hi=(H0+i)%m;     		//按照线性探测法计算下一个哈希地址Hi
        if (HT[Hi].key==NULLKEY) return -1;	//若单元Hi为空,则所查元素不存在
        else if (HT[Hi].key==key) return Hi; 	//若单元Hi中元素的关键字为key,则查找成功
     }
     return -1;
  }
}

int main()
{	
	int result,k,choose=1;
	//数组装着已经存储完毕的哈希表数据值
	int a[16]={-1,14,1,68,27,55,19,20,84,79,23,11,10,-1,-1,-1};//-1表示该位置没有存放数值 
	HashTable HT[m];
	for(int i=0;i<16;i++)
	{
		HT[i].key=a[i];
	}
    cout<<"哈希表从左往右存储的数据如下:"<<endl;
	for(int i=0;i<16;i++)
	{
		if(HT[i].key==-1)
		{
			cout<<"空"<<"  ";
		}
		else
		{
			cout<<HT[i].key<<"  ";
		}
	}
	while(choose==1)
	{
		cout<<endl;
		cout<<"输入要查找的数字:";
		cin>>k; 
		result=SearchHash(HT,k);
		if(result!=-1)
		{	
			cout<<"在第"<<result<<"位置找到"<<endl;
		}
		else
		{
			cout<<"未找到"<<endl;
		}
		cout<<endl;
		cout<<"是否要继续查找?(是:1,否:0)"<<endl;
		cout<<"请输入:";
		cin>>choose;
	}
	return 0;
}


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值