实验五
一、实验题目:
散列查找
二、实验目的:
⑴ 掌握散列查找的基本思想;
⑵ 掌握闭散列表的构造方法;
⑶ 掌握线性探测处理冲突的方法;
⑷ 验证散列技术的查找性能。
三、实验内容:
⑴ 对于给定的一组整数和散列函数,采用线性探测法处理冲突构造散列表;
⑵ 设计查找算法,验证查找性能。
实现提示
首先将待查找集合存储到闭散列表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;
}
程序运行结果截图:
四、实验心得体会
通过本次实验我掌握了散列查找的基本思想;掌握了闭散列表的构造方法;掌握了线性探测处理冲突的方法;验证了散列技术的查找性能。
在这个过程中我的程序技能更加完善。