首页 > 其他 > 详细

Hash表的实现

时间:2014-02-17 00:32:57      阅读:494      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
 1 #include "stdafx.h"
 2 #include <iostream>
 3 #include <exception>
 4 using namespace std;
 5 
 6 /*散列表查找实现
 7 散列表如果没有冲突,查找效率就非常高的.时间复杂度是O(1);但是实际应用中,冲突是不可避免的.
 8 那么散列表的平均查找长度取决于
 9 1.散列函数是否均匀.
10 2.处理冲突的方法.
11 3.散列表的装填因子.a = 填入表中的记录个数 / 散列表的长度.当a越大,产生冲突的可能性就越大.
12 用空间来换取时间
13 */
14 const int success = 1;
15 const int unSuccess = 0 ;
16 const int hashSize = 12;
17 const int nullKey = -32768;
18 const int ok = 1;
19 typedef struct
20 {
21     int *elem;
22     int count;
23 }HashTable;
24 int m = 0;
25 
26 /*初始化散列表*/
27 int InitHashTable(HashTable *H)
28 {
29     int i ;
30     m = hashSize;
31     H->count = m;
32     H->elem = (int *)malloc(sizeof(int));
33     for(int i = 0;i!=m;++i)
34         H->elem[i]=nullKey; //所有元素初始化
35     return ok;
36 }
37 
38 /*散列函数*/
39 int Hash(int key)
40 {
41     return key%m; //除留余数法
42 }
43 
44 /*插入关键字进散列表*/
45 void InsertHash(HashTable *H,int key)
46 {
47     int addr = Hash(key);
48     while(H->elem[addr]!=nullKey)
49     {
50         addr = (addr+1)%m;
51     }
52     H->elem[addr] = key;
53 }
54 
55 /*散列表查找关键字*/
56 int SearchHash(HashTable H,int key,int *addr)
57 {
58     *addr = Hash(key);
59     while(H.elem[*addr]!=key)
60     {
61         *addr=(*addr+1)%m;
62         if(H.elem[*addr] == nullKey|| *addr ==Hash(key))
63         {
64             return unSuccess;
65         }
66     }
67     return success;
68 }
69 int _tmain(int argc, _TCHAR* argv[])
70 { 
71     
72 
73     return 0 ;
74 }
bubuko.com,布布扣

Hash表的实现

原文:http://www.cnblogs.com/crazycodehzp/p/3551442.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!