首页 > 数据结构 > 查找 阅读:57,774

Hash查找

Hash表用于存放key-value数据。比如一个学生的成绩,那么学生的学号可以当做key,成绩当做value,存放与hash表中。

Hash查找必须提供一个Hash函数,用于通过Key来计算数据存放在hash表中的位置。一般hash函数可以设计为key%N,其中Nhash表中元素的个数(一般为质数)。假如HASH表的大小为N,那么Hash函数为:

 

Hash(key)=key%N

 

当对于不同的两个key,计算出来的hash值可能相同,在相同的时候,就叫做hash冲突。解决hash冲突的方法不止一种,比如通过链式法解决,即将所有含有相同hash值的数据存放在同一个链表中,而将链表的头结点存放在HASH表中。

 

所谓hash查找,就是通过对应的key,按照hash函数,计算出数据在hash表中的位置。Hash查找的复杂度为O(1),所以具有较高的查找效率。

 

请编写一个高效率的函数来找出字符串中的第一个无重复字符。例如,"total"中的第一个无重复字符是’o’

 

int hash(char ch)

{

       return ch;

}

 

char find_first_norepeat_ch(const char *str)

{

       int hasharr[256]={0};

       char *s=(char *)str;

 

       while(*s)

       {

              hasharr[hash(*s)]++;

              s++;

       }

 

       s=(char *)str;

 

       while(*s)

       {

              if(hasharr[*s]==1)

              {

                     return *s;

              }

              s++;

       }

 

       return '\0';

 

}

周哥教IT,分享编程知识,提高编程技能,程序员的充电站。跟着周哥一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

当你决定关注「周哥教IT」,你已然超越了90%的程序员!

IT黄埔-周哥教IT技术交流QQ群:213774841,期待您的加入!

二维码
微信扫描二维码关注