go语言数据结构第九篇-哈希表(散列)

概念

哈希表是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做哈希

go语言数据结构第九篇-哈希表(散列)

实际需求

google公司的一个上机题:基于哈希表的员工管理系统

有一个公司,当有新员工来报道时,要求将该员工的信息加入(id,名字),当输入该员工的id时,要求查找到该员工的所有信息。

要求:(1)不适用数据库,尽量节省内存,速度越快越好=>哈希表

           (2)添加时,保证按照员工的id从低到高插入

思路分析:

(1)使用链表来实现哈希表,该链表不带表头(即,链表的第一个结点就存放员工信息)

(2)示意图:

            说明:一个哈希表中存了7个链表。每个链表中包含了指向了自己的员工链表的头指针。每个员工链表的结点都是结构体,存储了id,名字。

         那么id该放入哪个链表中呢?使用散列函数,如散列函数为:key  =  id % 链表个数 。

        假设id=21,链表个数为7。则21%7=0,key就=0,这个id就放入LinkArr[0]的 链表中。再假设id=8,则8%7=1,key就=1,这个id就放入LinkArr[1]的链表中。

      当查询时id=28的员工信息时,得出key =  28%链表个数7 = 0,那么直接就在LinkArr[0]这个链表中查询就好了,搜索查询速度快了7倍。若使用10个链表,那就快10倍。链表个数越多,速度越快,但同时占用的空间就越大了。

go语言数据结构第九篇-哈希表(散列)

代码实现: