哈希表

 1 #include <stdio.h>
 2 #define HASH_LEN 13  //哈希表长度
 3 #define TABLE_LEN 8  //数据长度
 4 int data[TABLE_LEN] = {69, 65, 90, 37, 92, 6, 20, 54};
 5 int hash[HASH_LEN] = {0};    //initialize data is  0  初始化一个数组
 6 
 7 //将数值插入hash表中
 8 void InsertHash(int hash[], int m, int data)  
 9 {
10         int i;
11         i = data%13;    //get  hash address
12         while(hash[i]){ // the address used;判断冲突
13                 i++;  //解决冲突
14                 i = i % m;       
15         }
16         hash[i] = data;
17 }
18 
19 void CreateHash(int hash[], int m, int data[], int n)
20 {       
21         int i;
22         for(i=0;i<n;i++) //place the data to hash map
23         {         
24               InsertHash(hash, n, data[i]);
25         }
26 }
27 
28 int HashSearch(int hash[], int n, int key)
29 {
30         int i;
31         i = key%13; //get the hash address;
32         while(hash[i] &&hash[i]!=key) //is conflict?
33         {
34                 i++;
35                 i=i% n; //resolve confict       
36         }
37         if(hash[i]==0)
38                 return  -1;     //not find the data
39         else
40                 return i;       //find ok
41 }
42 
43 int main()
44 {
45         int key, i, pos;
46         CreateHash(hash, HASH_LEN, data, TABLE_LEN);    
47         printf("hash values: ");
48         for(i=0;i<HASH_LEN;i++)
49                 printf("%d  ", hash[i]);
50         printf("\n");
51         printf("input the key data:");
52         scanf("%d", &key);
53 
54         pos = HashSearch(hash, HASH_LEN, key);
55         if(pos>=0)
56                 printf("find ok, pos is NO.%d \n", pos);
57         else
58                 printf("find error\n");
59         return 0;
60 }

 

posted on 2014-12-20 22:39  阳台  阅读(168)  评论(0编辑  收藏  举报

导航