数据结构知识体系:数组、链表、哈希表、树、图、堆与面试
数据结构是数据的组织方式,也是对操作成本的取舍。数组连续存储,随机访问 O(1),中间移动昂贵;链表靠指针连接,已知节点附近插删方便,却不能常数时间按下标定位。栈和队列限制访问端点,从而清晰表达后进先出与先进先出。
哈希表把键映射到桶,平均查找 O(1),代价是额外空间、冲突处理和无序性。树表达层级:二叉搜索树支持按序查找,平衡树控制高度,B+ 树适合外存范围访问;堆只维护父子偏序,能以 O(log n) 插入删除并快速读取极值。图用于一般关系,邻接表节省稀疏图空间,邻接矩阵则让边查询简单。
选择结构前应列出工作负载:读多还是写多,按键还是按序访问,是否需要范围查询、极值、前缀、连通性,数据能否全部驻留内存。例如缓存淘汰常组合哈希表和双向链表,使定位与移动都为 O(1);前缀检索可用 Trie;动态连通可用并查集。
复杂度不是单个 API 标签。动态数组追加是摊还 O(1),扩容那一次仍要复制;哈希表平均常数不等于最坏常数;普通搜索树可能退化成链表。还要考虑缓存局部性、对象开销、并发和持久化。
误区是认为结构越高级越好,或只背复杂度而忽略前提。小结:先描述需要高频执行的操作和约束,再选能让主路径便宜、边界可控的数据结构组合。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Dai Wei!
评论

