用于编程面试或计算机科学课程
每种数据结构的大O复杂度成本和核心属性的快速参考。
数组(Array)
按顺序存储数据。通过索引可以快速查找。
动态数组(Dynamic Array)
随着添加更多项目而自动增长的数组。
链表(Linked List)
也按顺序存储数据。插入和删除比数组快,但查找较慢(需要"遍历"整个列表)。
队列(Queue)
就像繁忙餐厅外的排队。"先来先服务"。
栈(Stack)
就像水槽里的一摞脏盘子。你从顶部拿走的第一个是你最后放下的那个。
哈希表(Hash Table)
类似数组,但不使用索引,而是可以为每个值设置任意键。
树(Tree)
适合存储层次结构。每个节点可以有"子"节点。
二叉搜索树(Binary Search Tree)
左子树中的所有内容都小于当前节点,右子树中的所有内容都大于当前节点。O(lg n) 查找时间,但仅在树平衡时!
图(Graph)
适合存储网络、地理、社交关系等。
字典树(Trie)
在字符的大树中存储一组字符串。适合按前缀查找。有时节省空间。
堆(Heap)
最小值始终在顶部的二叉树。用它来实现优先队列。
优先队列(Priority Queue)
按优先级排序项目的队列。
布隆过滤器(Bloom Filter)
恒定空间的位图,让你快速检查项目是否在集合中。可能产生误报。
LRU缓存(LRU Cache)
让你快速识别哪个项目最长时间没有被使用。