1. CLRS Part III Data Structures 中栈、队列、链表、散列表、二叉搜索树的工程取舍。
请阐述 CLRS Part III 中栈、队列、链表、散列表、二叉搜索树等基础数据结构的工程取舍与适用场景?
- 各结构的操作复杂度
- 内存布局与缓存
- 现实场景选型
栈(LIFO)与队列(FIFO)是访问受限的线性结构,适合函数调用、括号匹配、BFS 等;链表支持 O(1) 插入删除但缓存不友好,适合频繁增删且不随机访问的场景;散列表提供摊还 O(1) 的插入/查找/删除,是无序 K-V 查询的主力,但需处理冲突、扩容与哈希函数;二叉搜索树(及平衡树)提供有序性与 O(log n) 的查询/前驱后继/范围查询,适合需要有序遍历的场景。工程取舍围绕"访问模式"与"缓存局部性":数组/栈/队列缓存友好,链表与散列表指针跳跃多,树结构介于其间。
数据结构的选型取决于操作的复杂度需求与内存布局。散列表以无序换取常数时间,树以系数换取有序性,链表以指针跳跃换取灵活增删,是工程取舍的典型代表。