3.1.2物理结构:连续与分散43
3.2基本数据类型45
3.3数字编码*46
3.3.1原码、反码和补码46
3.3.2浮点数编码49
3.4字符编码*50
3.4.1ASCII字符集50
3.4.2GBK字符集51
3.4.3Unicode字符集51
3.4.4UTF-8编码53
3.4.5编程语言的字符编码54
3.5小结55
第4章数组与链表58
4.1数组58
4.1.1数组常用操作58
4.1.2数组的优点与局限性62
4.1.3数组典型应用63
4.2链表63
4.2.1链表常用操作64
4.2.2数组与链表对比67
4.2.3常见链表类型67
4.2.4链表典型应用68
4.3列表69
4.3.1列表常用操作69
4.3.2列表实现71
4.4内存与缓存*73
4.4.1计算机存储设备73
4.4.2数据结构的内存效率75
4.4.3数据结构的缓存效率75
4.5小结76
第5章栈与队列81
5.1栈81
5.1.1栈的常用操作81
5.1.2栈的实现82
5.1.3两种实现对比86
5.1.4栈的典型应用87
5.2队列87
5.2.1队列常用操作88
5.2.2队列实现89
5.2.3队列典型应用94
5.3双向队列95
5.3.1双向队列常用操作95
5.3.2双向队列实现*96
5.3.3双向队列应用104
5.4小结104
第6章哈希表107
6.1哈希表107
6.1.1哈希表常用操作108
6.1.2哈希表简单实现109
6.1.3哈希冲突与扩容111
6.2哈希冲突113
6.2.1链式地址113
6.2.2开放寻址116
6.2.3编程语言的选择120
6.3哈希算法120
6.3.1哈希算法的目标121
6.3.2哈希算法的设计122
6.3.3常见哈希算法124
6.3.4数据结构的哈希值124
6.4小结125
第7章树129
7.1二叉树129
7.1.1二叉树常见术语129
7.1.2二叉树基本操作131
7.1.3常见二叉树类型132
7.1.4二叉树的退化134
7.2二叉树遍历135
7.2.1层序遍历135
7.2.2前序、中序、后序遍历136
7.3二叉树数组表示138
7.3.1表示完美二叉树138
7.3.2表示任意二叉树139
7.3.3优点与局限性142
7.4二叉搜索树142
7.4.1二叉搜索树的操作143
7.4.2二叉搜索树的效率151
7.4.3二叉搜索树常见应用151
7.5AVL树*152
7.5.1AVL树常见术语153
7.5.2AVL树旋转154
7.5.3AVL树常用操作160
7.5.4AVL树典型应用161
7.6小结162
第8章堆165
8.1堆165
8.1.1堆的常用操作166
8.1.2堆的实现167
8.1.3堆的常见应用177
8.2建堆操作177
8.2.1借助入堆操作实现177
8.2.2通过遍历堆化实现178
8.2.3复杂度分析178
8.3Top-k问题180
8.3.1方法一:遍历选择180
8.3.2方法二:排序180
8.3.3方法三:堆181
8.4小结182
第9章图184
9.1图184
9.1.1图的常见类型与术语185
9.1.2图的表示186
9.1.3图的常见应用188
9.2图的基础操作188
9.2.1基于邻接矩阵的实现188
9.2.2基于邻接表的实现192
9.2.3效率对比196
9.3图的遍历196
9.3.1广度优先遍历196
9.3.2深度优先遍历198
9.4小结200
第10章搜索203
10.1二分查找203
10.1.1区间表示方法207
10.1.2优点与局限性208
10.2二分查找插入点209
10.2.1无重复元素的情况209
10.2.2存在重复元素的情况210
10.3二分查找边界212
10.3.1查找左边界212
10.3.2查找右边界212
10.4哈希优化策略214
10.4.1线性查找:以时间换空间214
10.4.2哈希查找:以空间换时间215
10.5重识搜索算法217
10.5.1暴力搜索217
10.5.2自适应搜索218
10.5.3搜索方法选取218
10.6小结220
第11章排序222
11.1排序算法222
11.1.1评价维度222
11.1.2理想排序算法223
11.2选择排序224
11.3冒泡排序229
11.3.1算法流程231
11.3.2效率优化232
11.3.3算法特性233
11.4插入排序233
11.4.1算法流程234
11.4.2算法特性235
11.4.3插入排序的优势235
11.5快速排序235
11.5.1算法流程239
11.5.2算法特性240
11.5.3快速排序为什么快240
11.5.4基准数优化241
11.5.5尾递归优化242
11.6归并排序242
11.6.1算法流程243
11.6.2算法特性248
11.6.3链表排序248
11.7堆排序249
11.7.1算法流程249
11.7.2算法特性250
11.8桶排序250
11.8.1算法流程251
11.8.2算法特性252
11.8.3如何实现平均分配252
11.9计数排序253
11.9.1简单实现254
11.9.2完整实现255
11.9.3算法特性256
11.9.4局限性256
11.10基数排序257
11.10.1算法流程257
11.10.2算法特性259
11.11小结259
第12章分治263
12.1分治算法263
12.1.1如何判断分治问题264
12.1.2通过分治提升效率264
12.1.3分治常见应用266
12.2分治搜索策略267
12.3构建二叉树问题269
12.4汉诺塔问题273
12.5小结280
第13章回溯282
13.1回溯算法282
13.1.1尝试与回退283
13.1.2剪枝288
13.1.3框架代码289
13.1.4常用术语291
13.1.5优点与局限性291
13.1.6回溯典型例题292
13.2全排列问题292
13.2.1无相等元素的情况293
13.2.2考虑相等元素的情况295
13.3子集和问题298
13.3.1无重复元素的情况298
13.3.2考虑重复元素的情况302
13.4n皇后问题304
13.5小结308
第14章动态规划310
14.1初探动态规划310
14.1.1方法一:暴力搜索311
14.1.2方法二:记忆化搜索313
14.1.3方法三:动态规划314
14.1.4空间优化316
14.2动态规划问题特性316
14.2.1最优子结构316
14.2.2无后效性319
14.3动态规划解题思路321
14.3.1问题判断321
14.3.2问题求解步骤322
14.40-1背包问题332
14.5完全背包问题343
14.5.1完全背包问题344
14.5.2零钱兑换问题I348
14.5.3零钱兑换问题II350
14.6编辑距离问题352
14.7小结356
第15章贪心359
15.1贪心算法359
15.1.1贪心算法的优点与局限性360
15.1.2贪心算法特性361
15.1.3贪心算法解题步骤362
15.1.4贪心算法典型例题363
15.2分数背包问题363
15.3最大容量问题366
15.4最大切分乘积问题373
15.5小结377
附录A术语表379