哈希表
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 }