- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
 - 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
 - 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
 - 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
 - 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
 - 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
 - 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
 
                        查看更多
                        
                    
                c++哈希查找设计报告.doc
                    实验五 hash查找
题目:编制一个利用hash表进行查找的程序
班级: 计科0906   姓名: 马飞扬      学号: 200948140622   完成日期:    -  -
一:需求分析
1:利用hash函数建立哈希表,并采用链地址法处理冲突。然后进行查找操作验证算法,表长由客户输入。
二:概要设计
1:在hash函数中p值采用了表长值,虽然会增加冲突发生的可能性,但能够保证数据较均匀的分布于整个hash表中,在大量数据的情况下不至于浪费存储空间。
2:采用链地址法处理冲突虽然造成基于指针的操作较复杂,但能够提高程序效率,降低时间复杂度。
3:若要由客户来决定表长,则必须用到动态开辟的知识,即动态开辟存储空间。
三:详细设计
#includeiostream
using namespace std;
struct hashlian//定义hash表的结点存储结构
{
	int key;//存储关键字
	hashlian*next;//地址指针
};
void main()
{
	int m=0;//
	int i=0;//
	int j=0;//辅助变量
	int weizhi=0;//记录元素对应的结点位置
	int find=0;//记录待查找的元素
	int *data;//存储要操作的数据
	hashlian*p1=NULL;//
	hashlian*p2=NULL;//指向结点的辅助指针
	hashlian*hash=NULL;//
	cout输入最大数据个数:;
	cinm;//输入hash表长
	hash=new hashlian[m];//存储hash表
	data=new int[m];//动态开辟存储空间
	for(int ii=0;iim;ii++)//对hash表进行初始化
	{
		hash[ii].key=-1;
		hash[ii].next=NULL;
	}
	cout输入数据(退出输入-1)!endl;//
	cout第一个:;cindata[i];//
	while(data[i]!=-1)//循环输入待操作的数据
	{
		if(i=m-1)
		{
		  i++;
		  cout第i+1个:;
		  cindata[i];
		}
		else
		{
			cout越界了!endl;
		}
	}
	j=i;
	for(i=0;ij;i++)//链地址法处理冲突建立hash表
	{
		weizhi=data[i]%m;//定位存储位置
		if(hash[weizhi].key=-1)//若当前无元素直接存储
		{
			hash[weizhi].key=data[i];
		}
		else
		{
			p1=hash[weizhi];
			p2=p1-next;
			while(p2!=NULL)//控制p2始终指向最后一个结点的下一位
			{
				p1=p2;
				p2=p2-next;
			}
			p2=new hashlian;
			p2-key=data[i];//动态申请空间进行存储后再插入
			p2-next=NULL;
			p1-next=p2;
		}
	}
	cout输入查找的数据:;cinfind;
	weizhi=find%m;//定位待查找数据的应存储位置
	p1=hash[weizhi];
	while(p1!=NULL)//从第一个位置开始循环查找直到最后一个结点的下一位
	{
		if(p1-key==find)
		{
			cout查找成功!endl;
			break;
		}
		p1=p1-next;
	}
	if(p1==NULL)//全部查找后仍没有则查找失败
	{
		cout查找失败!endl;
	}
    			
}
四:调试分析
在本次试验中主要是在选择hash函数中的p值时多考虑了一些因素,然后在基于链操作时遇到了一些小麻烦,其它的倒很简单。由于时间比较紧迫,所以仅仅实现了查找操作,对于插入和删除,有时间还要练一下。
五:运行结果
六:实验环境
1:window xp 系统下
2:visual c++ 6.0 编程环境
七:实验体会
通过本次试验掌握了hash查找算法,但由于时间比较仓促,所以除此之外收获并不大,有时间的话这方面的内容还要在练一下。
	
		
                
原创力文档
                        

文档评论(0)