动态可扩展哈希表的实现--第一集

          近来从阿里到谷歌的面试笔试被虐,严重的反映出对基础数据结构与算法掌握的不足,痛定思痛,遂有此系列。

          此篇是我从:http://www.php-internals.com/book/?p=chapt03/03-01-01-hashtable转载得之,此中哈希的结构简单易懂,是很好的一个可扩展哈希表的模版。可以记之,以后在慢慢填充。

          里面有少量我改写的地方,我会标记出来。

         此篇主要是讲哈希表的动态可扩展实现,使用的是链接法,以下不再重复。

 

基本概念:

        哈希表是一种通过哈希函数,将特定的键映射到特定值的一种数据结构,它维护键和值之间一一对应关系。

  • 键(key):用于操作数据的标示,例如PHP数组中的索引,或者字符串键等等。
  • 槽(slot/bucket):哈希表中用于保存数据的一个单元,也就是数据真正存放的容器。
  • 哈希函数(hash function):将key映射(map)到数据应该存放的slot所在位置的函数。
  • 哈希冲突(hash collision):哈希函数将两个不同的key映射到同一个索引的情况。

哈希表的实现

在了解到哈希表的原理之后要实现一个哈希表也很容易,主要需要完成的工作只有4点:

  1. 数据结构
  2. 实现哈希函数
  3. 冲突的解决
  4. 操作接口的实现

数据结构

基本的数据结构主要有两个,一个用于保存哈希表本身,另外一个就是用于实际保存数据的单链表了,

typedef struct _Bucket
{
    char *key;
    void *value;
    struct _Bucket *next;
} Bucket;
 
typedef struct _HashTable
{
    int size;
    int elem_num;
    Bucket** buckets;
} HashTable;

 

 http://blog.csdn.net/zuiaituantuan/article/details/6057586

http://blog.minidx.com/2008/01/27/446.html

http://www.php-internals.com/book/?p=chapt03/03-01-01-hashtable

http://hi.baidu.com/calrincalrin/item/dd826f76cffc935d0d0a07c5

http://www.cnblogs.com/nocode/archive/2011/10/14/2212586.html

 

你可能感兴趣的:(C语言,可扩展,哈希表)