数据结构之哈希表

本文介绍了哈希表的基本概念,它利用哈希函数实现高效查找、插入和删除。对比了哈希表与其他数据结构的区别。讨论了哈希函数的设计要求,如计算简单和地址分布均匀,并列举了直接定址法、余数法、平方取中法和随机数法等构造方法。同时,阐述了哈希冲突的解决策略,包括拉链法和双散列法,探讨了如何优化冲突处理以提高性能。
摘要由CSDN通过智能技术生成

1. 哈希表简述

散列表的英文名称为 hash table,因此散列表又被称为哈希表,散列函数又被称为哈希函数

散列表通常基于数组来实现。借助散列函数对数组进行扩展,利用的是数组支持按照下标随机访问元素的特性

  • 存放数据的时候,散列函数根据 f(key) 计算出数据应该存储的位置即数组下标,从而将不同的数据分散在不同的存储位置,这也是散列的由来
  • 查找的时候,通过散列函数 f(key) 直接确定查找 hash 值所在位置即数组下标。而不需要一个个比较,直接找到数据,提升效率
  • 散列表存放元素的数组位置也被称为槽 slot

1.1. 哈希表与链表,树等查找数据的不同

最简单的顺序表结构查找包括简单的顺序查找、二分查找、插值查找、以及后来的树结构查找包括二叉排序树、平衡二叉树、多路查找树、红黑树等。它们有一个功能特点就是,要查找的元素始终要与已经存在的元素进行多次比较,才能查找该元素

散列表与线性表、树、图等结构不同的是,后几种结构数据元素之间都存在某种逻辑关系,而使用散列技术的散列表的数据元素之间不存在什么逻辑关系,元素的位置只与关键字 key 和散列函数 f(key) 有关联

1.2. 几种典型数据结构特点

  • 数组:随机访问效率较高,插入和删除效率较低
  • 链表:随机访问效率较低,插入和删除效率较高</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值