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

如何建立英文字符的哈希表

时间:2014-09-24 17:43:17      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:c   哈希表   

       经常会遇到需要建立字符串哈希表的问题,例如strtok,或者删除指定字符串的中一些字符等等,可见的字符有256个,那么很容易想到建立一个哈希表,但是其中有一些技巧,可以节省空间,其实可以使用bitmap的形式实现,但是c语言中没有现成的东西,所以需要自己实现。下面就是实现方式:

char hash[32] = {0};
do
{
    hash[*str >> 3] |=  (1 << (*str & 7));
}while(*str++)

      以上就建立了一个可以容纳256个字符的hash表,首先解释一下为什么只用32个char的数组就可以表示给256个字符打点标记,因为32个字符的数据内存上是连续的,每个字符是8个bit,所以char hash[32]总共有256和bit,也就能够表示指定的字符是否出现过。接下来就是如何置位了,*str >> 3表示 *str / 8,也就是计算该字符应该在第几个char上打点标记,*str & 7表示*str % 7,可以计算出应该在该char上的哪个bit打点标记。至于为什么用位操作实现,是因为位操作很快。

     下面是如何查找字符是否在哈希表中的代码:

if((map[*str >> 3]) &  (1<< (*str & 7)))


如何建立英文字符的哈希表

标签:c   哈希表   

原文地址:http://blog.csdn.net/wdxin1322/article/details/39522293

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