标签:
5-6 HashSearch.c
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,28,54}; //原始数据 5 int hash[HASH_LEN]={0};//哈希表,初始化为0 6 void InsertHash(int hash[],int m,int data) //将关键字data插入哈希表hash中 7 { 8 int i; 9 i=data % 13;//计算哈希地址 10 while(hash[i]) //元素位置已被占用 11 i=(++i) % m; //线性探测法解决冲突 12 hash[i]=data; 13 } 14 void CreateHash(int hash[],int m,int data[],int n) 15 { 16 int i; 17 for(i=0;i<n;i++) //循环将原始数据保存到哈希表中 18 InsertHash(hash,m,data[i]); 19 } 20 int HashSearch(int hash[],int m,int key) 21 { 22 int i; 23 i=key % 13;//计算哈希地址 24 while(hash[i] && hash[i]!=key) //判断是否冲突 25 i=(++i) % m; //线性探测法解决冲突 26 if(hash[i]==0) //查找到开放单元,表示查找失败 27 return -1;//返回失败值 28 else//查找成功 29 return i;//返回对应元素的下标 30 } 31 int main() 32 { 33 int key,i,pos; 34 CreateHash(hash,HASH_LEN,data,TABLE_LEN);//调用函数创建哈希表 35 printf("哈希表各元素的值:"); 36 for(i=0;i<HASH_LEN;i++) 37 printf("%ld ",hash[i]); 38 printf("\n"); 39 printf("输入查找关键字:"); 40 scanf("%ld",&key); 41 pos=HashSearch(hash,HASH_LEN,key); //调用函数在哈希表中查找 42 if(pos>0) 43 printf("查找成功,该关键字位于数组的第%d个位置。\n",pos); 44 else 45 printf("查找失败!\n"); 46 getch(); 47 return 0; 48 }
标签:
原文地址:http://www.cnblogs.com/wozixiaoyao/p/5683179.html