题目描述
采用除留余数法(H(key)=key %n)建立长度为n的哈希表,处理冲突用开放定址法的线性探测。
输入
第一行为哈希表的长度n; 第二行为关键字的个数; 第三行为关键字集合; 第三行为要查找的数据。输出
如果查找成功,输出关键字所哈希表中的地址和比较次数;如果查找不成功,输出-1。样例输入
13 11 16 74 60 43 54 90 46 31 29 88 77 16样例输出
3,1#include<iostream> #include<algorithm> #include<cstring> #include<string> #include<cstdio> using namespace std; #define INF 0x3f3f3f3f #define M 100 typedef struct node { int data; int count; }hashtable; void inserthash(hashtable ha[],int m,int num) { int temp=num%m; int i=1; if(ha[temp].data==-1) { ha[temp].data=num; ha[temp].count=1; } else { while(ha[temp].data!=-1) { temp=(temp+i)%m; i++; } ha[temp].data=num; ha[temp].count=i; } } void search(hashtable ha[],int m,int k) { int i=1,adr; adr=k%m; while(ha[adr].data!=-1&&ha[adr].data!=k) { i++; adr=(adr+1)%m; } if(ha[adr].data==k) cout<<k%m<<","<<i; else cout<<"-1"; } void createhash(hashtable ha[],int m,int n,int key[]) { for(int i=0;i<m;i++) { ha[i].data=-1; ha[i].count=0; } for(int i=0;i<n;i++) { inserthash(ha,m,key[i]); } } int main() { hashtable ha[M]; int m,n; cin>>m>>n; int key[M]; for(int i=0;i<n;i++) { cin>>key[i]; } int k; cin>>k; createhash(ha,m,n,key); search(ha,m,k); return 0; }
09-18
351
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交