散列表(Hash Table)
散列表:根据关键字而直接进行访问的数据结构。也就是说,散列表建立了关键字和存储地址之间的一种直接映射关系。
![在这里插入图片描述](https://img-blog.csdnimg.cn/2238a11a5a3043bfac5d132641ca99e1.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MzE0ODY0,size_16,color_FFFFFF,t_70#pic_center)
理想情况下,对散列表进行查找的时间复杂度为O(1),即与表中元素的个数无关。
处理冲突的方法——拉链法
对于不同的关键字可能会通过散列函数映射到同一地址,为了避免非同义词发生冲突,可以把所有的同义词存储在一个线性链表中,这个线性链表由其散列地址唯一标识。
![在这里插入图片描述](https://img-blog.csdnimg.cn/ff428af987d044c6aa3bfc63912abe1c.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2MzE0ODY0,size_16,color_FFFFFF,t_70#pic_center)
假设散列地址为i的同义词链表的头指针存放在散列表的第i个单元中,因而查找、插入和删除操作主要在同义词链中进行。
拉链法的小优化
拉链法适用于经常进行插入和删除的情况。