解决哈希冲突

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

解决哈希冲突

一、需求分析

1、本程序由用户输入运行命令和数据,运行结果显示在其后。

2、程序执行的命令包括:

1)输入相关信息,构造一个指针型向量;2)输入数据,保存在哈希表中;3)输出用链地址法解决哈希冲突的结果。

2、测试数据

输入:T N M(T 表示hash表空间,N表示Hash函数的模,输入的数据个数)8 6 5

输入的数据:7,13,10,16,22

二、概要设计

#include

using namespace std;

struct Chain

{

int m;

Chain *next;

};

int T,M,N;

int key(int m,int n)

{

return m%n;

}

void create(Chain ChainHash[],int T,int M,int N)

{

Chain *p;

p=new Chain;

cout<<"输入数据:\n";

for(int i=0;i

{

Chain *q=new Chain;q->next=NULL;

cin>>q->m;

if(ChainHash[key(q->m,N)].next!=NULL)

{

p=&ChainHash[key(q->m,N)];

while(p->next!=NULL){p=p->next;}

p->next=q;

}

else{ChainHash[key(q->m,N)].next=q;}

}

}

void out_put(Chain a)

{

Chain *p=a.next;

if(p==NULL) {cout<<"^"<

else

{

while(p!=NULL)

{

cout<<"->"<m;

p=p->next;

}

cout<

}

}

void output(Chain a[],int T)

{

for(int i=0;i

{

cout<

out_put(a[i]);

}

}

void main()

{

int T=0,M=0,N=0;Chain ChainHash[30];

cout<<"输入Hash表空间:T=";cin>>T;

cout<<"输入Hash函数的模:N=";cin>>N;

cout<<"输入的数据个数M=";cin>>M;

for(int i=0;i

{

ChainHash[i].next=NULL;

}

create(ChainHash,T,M,N);

output(ChainHash,T);

cout<<"ASL=(1*2+2*2+3)/M="<<(1*2+2*2+3)/M<

}

四、调试分析

在编写时程序时,没有认真考虑链表的连接问题,总是出现链表连不上的情况。经过调试分析后,我终于找到了问题的所在。不但解决了问题,同时还加深了我对链表存储结构的理解。还有,在编写的时候,对于用链地址法解决哈希冲突是第一次,所以刚开始不知该如何下手。之后,经过查资料和认真分析,终于找到了方法。

五、运行结果

六、实验环境

(1)Windows 7系统下

(2)编程环境:VC6.0++ ,TC2.0

相关文档
最新文档