- 3
- 0
- 约3.8千字
- 约 5页
- 2020-11-04 发布于天津
- 举报
xxx 大学实验报告
课程名称 数据结构 实验项目 实验三 查找和排序 ( 一 ) ——查找
院 系 信息学院计类系 专业班级 计类 1501
姓 名 学 号
指导老师 日 期
批改日期 成 绩
一 实验目的
1.掌握哈希函数——除留余数法的应用;
2. 掌握哈希表的建立;
3. 掌握冲突的解决方法;
4. 掌握哈希查找算法的实现。
二 实验内容及要求
实验内容: 已知一组关键字 (19,14,23,1,68,20,84,27,55,11,10,79) ,哈希
函数定义为: H(key)=key MOD 13, 哈希表长为 m=16。实现该哈希表的散列,并
计算平均查找长度(设每个记录的查找概率相等) 。
实验要求: 1. 哈希表定义为定长的数组结构; 2. 使用线性探测再散列或链
地址法解决冲突; 3. 散列完成后在屏幕上输出数组内容或链表; 4. 输出等概率
查找下的平均查找长度; 5. 完成散列后,输入关键字完成查找操作,要分别测
试查找成功与不成功两种情况。
注意:不同解决冲突的方法会使得平均查找长度不同, 可尝试使用不同解决
冲突的办法,比较平均查找长度。 (根据完成情况自选,但至少能使用一种方法
解决冲突)
三 实验过程及运行结果
#include stdio.h
#include stdlib.h
#include string.h
#define hashsize 16
#define q 13
int sign=2;
typedef struct Hash
{
int date; // 值域
int sign; // 标记
}HashNode;
void compare(HashNode H[],int p,int i,int key[]) // 线性冲突处理
{
p++;
if(H[p].sign!=0)
{
sign++;
compare(H,p,i,key);
}
else
{
H[p].date=key[i];
H[p].sign=sign;
sign=2;
}
}
void Hashlist(HashNode H[],int key[])
{
int p;
for(int i=0;i12;i++)
{
p=key[i]%q;
if(H[p].sign==0)
{
H[p].date=key[i];
H[p].sign=1;
}
else
compare(H,p,i,key);
}
}
int judge(HashNode H[],int num,int n) // 查找冲突处理
{
n++;
if(n=hashsize) return 0;
if(H[n].date==num)
{
printf( 位置 \t
原创力文档

文档评论(0)