码迷,mamicode.com
首页 > 其他好文 > 详细

5.5 哈希表

时间:2016-07-19 09:23:10      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

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 }

 

5.5 哈希表

标签:

原文地址:http://www.cnblogs.com/wozixiaoyao/p/5683179.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!