【数据结构实验五】- 散列查找

实验五


一、实验题目:

散列查找

二、实验目的:

⑴ 掌握散列查找的基本思想;
⑵ 掌握闭散列表的构造方法;
⑶ 掌握线性探测处理冲突的方法;
⑷ 验证散列技术的查找性能。

三、实验内容:

⑴ 对于给定的一组整数和散列函数,采用线性探测法处理冲突构造散列表;
⑵ 设计查找算法,验证查找性能。

实现提示

首先将待查找集合存储到闭散列表ht中,然后随机生成待查元素的下标,考查在查找成功情况下的比较次数。

1.散列查找

程序代码:
#include <stdlib.h>
#include <iostream>
using namespace std;
struct hashNode
{
    int data;
    bool used;
};

void InithashTable(hashNode table[],int size)
{
    int key,j,i;
    int count=0;

   	cout<<"Please input key value.\n";
  	cin>>key;
   	count++;
   	int p=5;
   	while(key!='#'&&count<=size){
   	j=key%p;
  
  
   	while(table[j].used==1&&table[j].data!=0)
   		j=(j+1)%size;
    	if(table[j].used==0) 
		{
   			table[j].data=key;
   			if(table[j].data!=0)
   			table[j].used=1;
   		}
	   cin>>key;
	   count++;
	   }
}

int HashSearch(hashNode table[],int size,int key)
{
	int j=key%5;
	int count=0;
	int i;
	i=j;
	while(table[i].data!=0)
	{
		if(++count&&table[i].data==key)
		{
			cout<<"查找成功,比较次数为:"<<count<<endl;
			return i;
		}
		i=(i+1)%size;
		if(i==j) break;
	}
	cout<<"查找失败";
}

void dispHashTable(hashNode table[],int size)
{
	for(int i=0;i<size;i++)
    {
        if(table[i].used==1)
		{
        	cout<<"下标:"<<i<<"散列值:";
        	cout<<table[i].data<<"\n";
		}
    }
}

int main()
{
	int size;
	cout<<"Please input size.\n";
    cin>>size;
    hashNode table[size];
    int i;
    for(i=0;i<size;i++)
    {
        table[i].data=0;
        table[i].used=0;
    }
	InithashTable(table,size);
	dispHashTable(table,size);
    int location=HashSearch(table,size,15);
    cout<<"查找位置为:"<<location;
}
程序运行结果截图:

在这里插入图片描述

四、实验心得体会

通过本次实验我掌握了散列查找的基本思想;掌握了闭散列表的构造方法;掌握了线性探测处理冲突的方法;验证了散列技术的查找性能。
在这个过程中我的程序技能更加完善。

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值