数组
连续分配的内存块
- 一维数组
- 多维数组
- 自动扩容功能
链表
分散分配的内存块
- 单链表
- 双向链表
- 循环链表
- 单向循环链表
- 双向循环链表
队列 (链表的子集)
先进先出视为队列,队列的功能可以被链表覆盖。
- 单向先进先出队列
- 双线先进先出队列
- 循环队列(仅数组实现)
- 优先级队列 (使用堆实现)
栈 (链表的子集)
先进后出视为栈
同上,可以被链表覆盖
树 (链表的父级)
树的节点有一个父节点和多个子节点的数据结构。
链表是有一个父节点并且只有一个子节点的特殊的树
不同树结构的区别。
- 有序/无序
- 有权/无权
- 子节点上限(2个,3个,多个等)
- 是否自平衡(最低层和最高层层级差不超过1)
二叉树 (最多有2个子节点)
- 完全二叉树 (只有叶子层节点不满,上层节点已满)
- 最小/大堆
- 满二叉树(每个节点都有2个子节点)
- 二叉查找树(左子节点<根节点<=右子节点,有序的二叉树)
- 平衡二叉查找树
- 红黑树
- AVL树
多叉树 有多个子节点
- B树
- B+树
- B*树
- B-树
- 字典树 trie树
- 前缀树
- 后缀树
贴个图
还有其他的:
BKD-树 (elasticsearch 中用于存储整数并且快速查找)
相关算法:
前/中/后序遍历
图(树的父集)
图表示节点和节点之间的关系,不限制父节点和子节点的个数
图和图的区分
- 有向/无向
- 有环/无环
- 完全/不完全
- 有权/无权
相关概念
- 无向图
- 有向图
- 完全图 (节点两两之间有边相连)
- 稠密图 (图的边比较多)
- 稀疏图 (图的边比较少)
相关算法:
- 搜索算法
- 广度优先搜索 BFS
- 深度优先搜索 DFS
- A*启发式搜索
- 单源最短路径算法
- Dijkstra
- Bellman-Ford
- 最小生成树算法
- Prim
- Kruskal
- 图匹配算法
- 匈牙利算法
- 网络流算法
-最大流量算法 Ford-Fulkerson - 强连通分支算法
- Kosaraju
- Gabow
- Tarjan
组合数据结构
多种数据结构组合形成
- 散列表 (数组+链表)
- 斐波那契堆 链表+二叉树
- 二项堆 (链表+二叉树)
- 跳表
java容器实现
java.util: 线程不安全集合
- List 链表接口
- LinkedList 双向链表实现
- ArrayList 自动扩容数组实现
- Vector 自动扩容数组实现 (线程安全 synchorized修饰)
- Stack 栈 Vector实现
- Queue 单向先进先出队列接口
- PriorityQueue 数组+自动扩容+最小堆实现的优先级队列
- Deque 双向先进先出队列接口
- ArrayDeque 数组实现的双向队列 自动扩容+数组实现
- LinkedList: 双向链表 可以替代 链表实现的双向队列
- Map
- HashMap 散列表实现,1.8以后加入了红黑树
- Hashtable 散列表实现 (线程安全 synchorized修饰)
- TreeMap 红黑树实现 有序
- WeakHashMap 散列表实现
- Set
- HashSet HashMap实现
- TreeSet TreeMap实现
java.util.concurrent 下面是线程安全的集合
- List
- CopyOnWriteArrayList
- Set
- CopyOnWriteArraySet CopyOnWriteArrayList 实现
- ConcurrentSkipListSet ConcurrentSkipListMap 实现
-Map - ConcurrentHashMap 锁分段+散列表实现
- ConcurrentSkipListMap 跳表实现
- Queue
- LinkedBlockingQueue 单向链表实现的单向队列(指定大小)
- ArrayBlockingQueue 自动扩容+数组实现的单向队列
- PriorityBlockingQueue 数组+自动扩容+最小堆实现的优先级队列
- Deque
- ConcurrentLinkedDeque 双向链表实现的无界队列
- LinkedBlockingDeque 双向链表实现的(指定大小)双向并发阻塞队列
来源:CSDN
作者:灵520翼
链接:https://blog.csdn.net/u013501457/article/details/104109521