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

 

posted on 2012-11-30 21:09  Besion王  阅读(623)  评论(0编辑  收藏  举报

导航