本书图文并茂、通俗易懂,详细讲解常用的算法知识,又融入了大量的竞赛实例和解题技巧,可帮助读者熟练应用各种算法解决实际问题。 本书总计9章。第1章讲解C++基础知识,涉及语法、数组、字符串、结构体和指针;第2章带读者感受算法之美,涉及算法复杂度、函数和递归;第3章讲解线性表的应用,涉及顺序表、链表、栈和队列,以及STL中的常用函数和容器;第4章讲解树的应用,涉及树、二叉树、二叉树遍历、哈夫曼树和二叉搜索树;第5章讲解图论基础,涉及图的存储和图的遍历;第6章带读者进行算法入门,涉及贪心算法和分治算法;第7章讲解高精度计算,涉及高精度加法、高精度减法、高精度乘法和高精度除法;第8章带读者进行搜索算法入门,涉及二分算法、深度优先搜索和广度优先搜索;第9章带读者进行动态规划入门,涉及动态规划秘籍、背包问题、线性动态规划和区间动态规划。 本书面向对算法感兴趣的读者,无论是想扎实内功或参加算法竞赛的学生,还是想进入名企的学生、求职者,抑或是想提升核心竞争力的在职人员,都可以参考本书。若读者想进一步学习数据结构与算法,则可参考《算法训练营:提高篇(全彩版)》和《算法训练营:进阶篇(全彩版)》。
陈小玉南阳理工学院副教授,高级程序员,主要研究方向为算法优化和机器学习。出版著作有《趣学算法》《趣学数据结构》《算法训练营》,所教学生多次获得ACM-ICPC、蓝桥杯等算法竞赛奖项。
第1章  C++基础知识    1
1.1  开启算法之旅    1
1.2  常用的数据类型    2
1.3  玩转输入和输出    2
1.4  常用的运算符    3
1.5  选择结构语句    5
1.5.1  if条件语句    5
1.5.2  switch条件语句    9
1.6  循环结构语句    10
1.6.1  for语句    10
1.6.2  while语句    13
1.6.3  do while语句    14
1.7  巧用数组    15
1.7.1  一维数组    15
1.7.2  二维数组    17
1.8  玩转字符串    18
1.8.1  C风格的字符串    19
1.8.2  C++ string类型的    
字符串    20
1.9  结构体的应用    21
1.10  指针的应用    22
第2章  算法之美    24
2.1  算法复杂度    24
2.1.1  时间复杂度    27
2.1.2  空间复杂度    27
2.2  函数    30
2.2.1  标准函数    30
2.2.2  传值参数    31
2.2.3  引用参数    31
2.2.4  数组参数    32
2.3  递归    33
2.3.1  递归函数    33
2.3.2  递归的原理    33
第3章  线性表的应用    37
3.1  顺序表    37
3.1.1  插入    38
3.1.2  删除    39
3.2  链表    40
3.2.1  单链表    40
3.2.2  双向链表    43
3.2.3  循环链表    45
3.2.4  静态链表    46
3.3  栈    49
3.3.1  入栈    49
3.3.2  出栈    49
3.3.3  取栈顶元素    50
3.4  队列    50
3.4.1  顺序队列    51
3.4.2  循环队列    53
3.5  STL中的常用函数和容器    56
3.5.1  sort()    57
3.5.2  vector(向量)    58
训练  角谷猜想    59
3.5.3  stack(栈)    60
训练  数字游戏    60
3.5.4  queue(队列)    61
训练  骑士移动    61
3.5.5  list(双向链表)    63
训练  新兵队列训练    64
第4章  树的应用    66
4.1  树    66
4.1.1  树的存储    68
4.1.2  树、森林与二叉树的    
转换    71
4.2  二叉树    73
4.2.1  二叉树的性质    74
4.2.2  满二叉树和完全二    
叉树    75
4.2.3  二叉树的存储结构    78
4.3  二叉树遍历    80
4.3.1  先序遍历    80
4.3.2  中序遍历    83
4.3.3  后序遍历    86
4.3.4  层次遍历    90
训练1  新二叉树    92
训练2  二叉树遍历    93
4.4  哈夫曼树    95
4.4.1  哈夫曼编码    95
4.4.2  哈夫曼编码的长度    
计算方法    108
训练1  围栏修复    109
训练2  信息熵    110
4.5  二叉搜索树    112
4.5.1  二叉搜索树原理详解    112
4.5.2  查找    112
4.5.3  插入    115
4.5.4  创建    116
4.5.5  删除    117
训练1  落叶    122
训练2  完全二叉搜索树    124
第5章  图论基础    127
5.1  图的存储    128
5.1.1  邻接矩阵    128
5.1.2  边集数组    129
5.1.3  邻接表    130
5.1.4  链式前向星    133
5.1.5  图的存储技巧    136
5.2  图的遍历    136
5.2.1  广度优先遍历    136
5.2.2  深度优先遍历    140
训练1  最大的节点    144
训练2  油田    145
第6章  算法入门    149
6.1  贪心算法    149
6.1.1  贪心算法秘籍    149
6.1.2  最优装载问题    150
训练1  部分背包问题    152
训练2  排队接水    153
训练3  线段覆盖    154
6.2  分治算法    156
6.2.1  分治算法秘籍    156
6.2.2  合并排序    156
6.2.3  快速排序    161
训练1  排序(模板)    168
训练2  求第k小的数    169
第7章  高精度计算    171
7.1  高精度加法    171
7.1.1  接收和存储数据    171
7.1.2  处理进位    171
训练  A+B Problem    174
7.2  高精度减法    175
7.2.1  比较大小    175
7.2.2  接收和存储数据    175
7.2.3  处理借位    175
训练  A-B Problem    177
7.3  高精度乘法    178
7.3.1  接收和存储数据    178
7.3.2  处理进位    178
训练  A*B Problem    179
7.4  高精度除法    180
7.4.1  接收和存储数据    180
7.4.2  按位相除    181
训练  A/B Problem    181
第8章  搜索算法入门    183
8.1  二分算法    183
8.1.1  二分查找    183
8.1.2  二分答案    186
训练1  查找    187
训练2  跳石头游戏    189
训练3  花环    193
8.2  深度优先搜索    195
8.2.1  回溯法的原理    195
8.2.2  回溯法模板    197
训练1  01背包问题    198
训练2  图的m着色问题    205
训练3  n皇后问题    213
8.3  广度优先搜索    227
8.3.1  分支限界法的原理    227
8.3.2  分支限界法秘籍    227
训练1  迷宫问题    228
训练2  01背包问题    229
第9章  动态规划入门    235
9.1  动态规划秘籍    235
9.1.1  动态规划的三个要素    236
9.1.2  动态规划的设计方法    236
9.2  背包问题    237
9.2.1  01背包问题    238
9.2.2  完全背包问题    246
训练1  骨头收藏家    246
训练2  存钱罐    248
9.3  线性动态规划    250
训练1  超级楼梯    250
训练2  数字三角形    251
训练3  最长上升子序列    253
训练4  最长公共子序列    256
训练5  最大连续子段和    257
9.4  区间动态规划    259
训练1  回文    259
训练2  括号匹配    261
训练3  乘法难题    263
训练4  猴子派对    265