Hash(闭散列(线性探查))
1 #include <iostream> 2 using namespace std; 3 int Hash(int*,int,int); 4 int main(){ 5 int n,num,key,j=0,k=0; 6 cin>>n; 7 int*pt= new int[n];int*pr= new int[n]; 8 for(;k<n;k++)pt[k]=0; 9 while(cin>>num){ 10 pr[j++]=num; 11 if(cin.get()=='\n')break; 12 } 13 num=j; 14 for(j=0;j<num;j++){ 15 key=pr[j] % n; 16 key=Hash(pt,key,n); 17 pt[key]=pr[j];} 18 for(int i=0;i<n;i++) 19 if(pt[i]!=0) cout<<i<<" "<<pt[i]<<endl; 20 } 21 int Hash(int*pt,int key,int n){ 22 if(pt[key]==0) return key; 23 else key++; 24 if (key==n) key=0; 25 Hash(pt,key,n); 26 }
2. Hash
Description:
使用闭散列,利用线性探查方法解决冲突,把给出的关键码插入到有n个槽的散列表中(槽从0到n-1编号)。使用的散列函数H(k) = k mod n。
Input:
第一行输入n(散列表的长度);第二行输入关键码序列(都是正整数)。
Output:
按行输出散列表的情况,每一行两个整数,中间有一个空格隔开。
第一个整数为槽号,第二个整数为对应槽所填的关键码。
Sample Input:
13
12 23 45 57 20 3 78 31 15 36
Sample Output:
0 78
2 15
3 3
5 57
6 45
7 20
8 31
10 23
11 36
12 12