|
23 | 23 | | :--: | :------: | :----------: | :--: | :--: | :-----------------------: | :--: |
|
24 | 24 | | 冒泡排序 | O(n^2) | O(1) | | | | 稳定 |
|
25 | 25 | | 插入排序 | O(n^2) | O(1) | | | | 稳定 |
|
26 |
| -| 计数排序 | | O(M) | | | 对于用例少的数据,比如对人的年龄排序或者身高排序。 | 稳定 | |
| 26 | +| 计数排序 | O(n + k) | O(M) | | | 对于用例少的数据,比如对人的年龄排序或者身高排序。 | 稳定 | |
27 | 27 | | 基数排序 | O(d(n+r)) | O(M) | | | | 稳定 |
|
28 |
| -| 桶排序 | | | | | | 稳定 | |
| 28 | +| 桶排序 | O(n+k) | O(n + k) | | | | 稳定 | |
29 | 29 | | 选择排序 | O(n^2) | O(1) | | | | 不稳定 |
|
30 | 30 | | 归并排序 | O(nlogn) | O(N) | | | | 稳定 |
|
31 | 31 | | 快速排序 | O(nlogn) | O(logn)~O(n) | | | | 不稳定 |
|
|
72 | 72 | - [ ] 红黑树
|
73 | 73 | - [ ] 哈希表
|
74 | 74 |
|
75 |
| -==================== 持续更新 =================== |
| 75 | +# 数据结构总结 |
| 76 | + |
| 77 | +线性结构和非线性结构数据结构的区别 |
| 78 | + |
| 79 | +> 线性结构 |
| 80 | +
|
| 81 | +1. 线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系。 |
| 82 | +2. 线性结构拥有两种不同的存储结构,即顺序存储结构和链式存储结构。顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的,链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息。 |
| 83 | +3. 线性结构中存在两种操作受限的使用场景,即队列和栈。栈的操作只能在线性表的一端进行,就是我们常说的先进后出(FILO),队列的插入操作在线性表的一端进行而其他操作在线性表的另一端进行,先进先出(FIFO),由于线性结构存在两种存储结构,因 此队列和栈各存在两个实现方式。 |
| 84 | +4. 常见的线性结构包括:数组、链表、堆栈和队列等。 |
| 85 | + |
| 86 | +> 非线性结构 |
| 87 | +
|
| 88 | +1. 树作为一种应用广泛的一对多非线性数据结构,不仅有数据间的指向关系,还有层级关系,常见的有二分搜索树(二叉树)、AVL树、B树以及红黑树等。 |
| 89 | + |
| 90 | + |
| 91 | + |
| 92 | +| 名称 | 类型 | 特性 | 常见应用 | |
| 93 | +| :----: | :----: | :----: | :----: | |
| 94 | +| 数组 | 线性结构 | 1. 基础数据机构;底层通过索引快速取得元素值;<br/> 2. 查询快O(1),增删慢O(n); | JDK中的ArrayList | |
| 95 | +| 链表 | 线性结构 | 1. 以链表节点为元素,元素中包含指向下一节点的引用;<br/> 2. 链表分为单向链表和双向链表,区别在于双向链表有前驱节点和后继节点;<br/> 3. 查询慢O(n),增删快O(1);| JDK中的LinkedList、LinkedHashMap等 | |
| 96 | +| 栈 | 线性结构 | 1. 先进后出的数据结构;| JDK中的SynchronousQueue | |
| 97 | +| 队列 | 线性结构 | 1. 先进先出的数据结构;| JDK中的线程池底层的队列,包括:LinkedBlockingQueue、SynchronousQueue、ArraysBlockingQueue、DelayQueue等 | |
| 98 | +| 二分搜索树 | 非线性结构 | 1. 二分搜索树是一颗二叉树,每棵树节点都包含了节点值;<br/> 2. 每个节点值都大于左子树的所有节点的值,而小于右子树的所有节点的值;<br/>| x | |
| 99 | +| AVL树 | 非线性结构 | 1. AVL树是一个平衡二叉树,平衡二叉树的特性就是指左右加点的差值不能大于一;<br/> 2. AVL树每次插入、删除都需要进行左旋、右旋来保持AVL树的平衡性,因而这种维护需要更多代价; <br/> 3. AVL树的高度平衡,查找节点效率高;<br/> 4. AVL树的高度为logN;| windows对进程地址空间的管理用到了AVL树 | |
| 100 | +| 红黑树 | 非线性结构 | 1. ① 根节点为黑色;② 红黑树节点要么是红色,要么是黑色;③ 任意节点到叶子节点经过的黑色节点数量相同;④ 每个叶子节点(没有子节点的节点)都是黑色的;⑤ 如果一个节点是红色的,那么它的子节点都是黑色的; <br/> 2. 红黑树是"近似平衡",因为红色节点的存在,让红黑树能够实现红色节点和其父亲节点进行融合,从而成为类似于2-3树这种"绝对平衡的树";<br/> 3. 红黑树的高度近似于2logN;<br/> 4. 红黑树由于是近似平衡,所以维护成本比AVL树的要低,并且实践证明,红黑树的插入、查找和删除性能都比较稳定;| JDK中的TreeMap使用了红黑树;linux中的epoll底层,用红黑树来存储epoll_fd; | |
| 101 | + |
76 | 102 |
|
77 | 103 | # leetcode专区
|
78 | 104 |
|
|
0 commit comments