定义哈希函数为H(key) = key%11,输入表长(大于、等于11)。输入关键字集合,用线性探测再散列构建哈希表,并查找给定关键字。
定义哈希函数为H(key) = key%11,输入表长(大于、等于11)。输入关键字集合,用线性探测再散列构建哈希表,并查找给定关键字。
测试次数t
每组测试数据为:
哈希表长m、关键字个数n
n个关键字
查找次数k
k个待查关键字
对每组测试数据,输出以下信息:
构造的哈希表信息,数组中没有关键字的位置输出NULL
对k个待查关键字,分别输出:0或1(0—不成功,1—成功)、比较次数、查找成功的位置(从1开始)
#include<iostream> using namespace std; #define INF -9999 int main() { int T; cin>>T; while(T--) { int m,n; cin>>m>>n; int *array=new int[m]; for(int i=0;i<m;i++) array[i]=INF; for(int i=0;i<n;i++) { int num; cin>>num; if(array[num%11]==INF) { array[num%11]=num; } else { int di=0; while(true) { if(array[(num%11+di)%m]==INF) { array[(num%11+di)%m]=num; break; } else di++; } } } for(int i=0;i<m;i++) { if(array[i]!=INF) cout<<array[i]; else cout<<"NULL"; if(i!=m-1) cout<<" "; } cout<<endl; int K; cin>>K; while(K--) { int di=0; int C; cin>>C; int times=0; while(true) { times++; if(array[(C%11+di)%m]==C) { cout<<"1"<<" "<<times<<" "<<(C%11+di)%m+1<<endl; break; } else if(di==m||array[(C%11+di)%m]==INF) { cout<<"0"<<" "<<times<<endl; break; } else di++; } } delete []array; } return 0; }
原文:https://www.cnblogs.com/SZU-DS-wys/p/12183039.html