第1篇 算法基础 2
第1章 数据结构基础 2
1.1 什么是数据结构 2
1.2 顺序表 2
1.2.1 顺序表的定义 3
1.2.2 向顺序表中插入元素 4
1.2.3 从顺序表中删除元素 6
1.2.4 实例与分析 7
1.3 链表 11
1.3.1 创建一个链表 12
1.3.2 向链表中插入结点 13
1.3.3 从链表中删除结点 14
1.3.4 销毁一个链表 15
1.3.5 实例与分析 16
1.4 栈 18
1.4.1 栈的定义 18
1.4.2 创建一个栈 19
1.4.3 入栈操作 20
1.4.4 出栈操作 21
1.4.5 栈的其他操作 22
1.4.6 实例与分析 23
1.5 队列 25
1.5.1 队列的定义 25
1.5.2 创建一个队列 26
1.5.3 入队列操作 27
1.5.4 出队列操作 28
1.5.5 销毁一个队列 29
1.5.6 循环队列的概念 29
1.5.7 循环队列的实现 30
1.5.8 实例与分析 32
1.6 树结构 34
1.6.1 树的概念 34
1.6.2 树结构的计算机存储形式 35
1.6.3 二叉树的定义 35
1.6.4 二叉树的遍历 36
1.6.5 创建二叉树 37
1.6.6 实例与分析 38
1.7 图结构 40
1.7.1 图的概念 40
1.7.2 图的存储形式 41
1.7.3 邻接表的定义 42
1.7.4 图的创建 43
1.7.5 图的遍历(1)——深度优先搜索 45
1.7.6 图的遍历(2)——广度优先搜索 47
1.7.7 实例与分析 49
1.8 章后习题 52
第2章 常用的查找与排序方法 55
2.1 顺序查找 55
2.2 折半查找 58
2.3 排序的概述 61
2.4 直接插入排序 62
2.5 选择排序 64
2.6 冒泡排序 67
2.7 希尔排序 69
2.8 快速排序 72
2.9 堆排序 76
2.10 各种排序算法性能比较 82
2.11 章后习题 83
第3章 常用的算法思想 86
3.1 什么是算法 86
3.2 算法的分类表示及测评 87
3.2.1 算法的分类 87
3.2.2 算法的表示 87
3.2.3 算法性能的测评 89
3.3 穷举法思想 89
3.3.1 基本概念 89
3.3.2 寻找给定区间的素数 90
3.3.3 TOM的借书方案 91
3.4 递归与分治思想 92
3.4.1 基本概念 92
3.4.2 计算整数的划分数 93
3.4.3 递归的折半查找算法 96
3.5 贪心算法思想 98
3.5.1 基本概念 98
3.5.2 最优装船问题 99
3.6 回溯法 102
3.6.1 基本概念 102
3.6.2 四皇后问题求解 104
3.7 数值概率算法 108
3.7.1 基本概念 108
3.7.2 计算定积分 108
3.8 章后习题 110
第2篇 常用算法实例解析 114
第4章 编程基本功 114
4.1 字符类型统计器 114
4.2 计算字符的ASCⅡ码 115
4.3 嵌套if-else语句的妙用 116
4.4 基于switch语句的译码器 118
4.5 判断闰年 119
4.6 指针变量作参数 120
4.7 矩阵的转置运算 121
4.8 矩阵的乘法运算 124
4.9 巧用位运算 125
4.10 文件的读写 126
4.11 计算文件的大小 128
4.12 记录程序的运行时间 129
4.13 十进制/二进制转化器 130
4.14 打印特殊图案 131
4.15 打印杨辉三角 133
4.16 复杂级数的前n项和 135
4.17 寻找矩阵中的“鞍点” 137
4.18 n阶勒让德多项式求解 138
4.19 递归反向输出字符串 140
4.20 一年中的第几天 141
第5章 数学趣题(一) 143
5.1 舍罕王的失算 143
5.2 求两个数的最大公约数和最小公倍数 144
5.3 歌德巴赫猜想的近似证明 145
5.4 三色球问题 148
5.5 百钱买百鸡问题 150
5.6 判断回文数字 152
5.7 填数字游戏求解 153
5.8 新郎和新娘 155
5.9 爱因斯坦的阶梯问题 157
5.10 寻找水仙花数 159
5.11 猴子吃桃问题 160
5.12 兔子产仔问题 161
5.13 分解质因数 162
5.14 常胜将军 165
5.15 求π的近似值 166
5.16 魔幻方阵 169
5.17 移数字游戏 172
5.18 数字的全排列 174
5.19 完全数 176
5.20 亲密数 178
5.21 数字翻译器 180
5.22 递归实现数制转换 183
5.23 谁在说谎 185
第6章 数学趣题(二) 187
6.1 连续整数固定和问题 187
6.2 表示成两个数的平方和 189
6.3 具有特殊性质的数 191
6.4 验证角谷猜想 192
6.5 验证四方定理 194
6.6 递归法寻找最小值 197
6.7 寻找同构数 199
6.8 验证尼科彻斯定理 201
6.9 三重回文数字 203
6.10 马克思手稿中的数学题 205
6.11 渔夫捕鱼问题 206
6.12 寻找假币 208
6.13 计算组合数 212
6.14 递归法求幂 213
6.15 汉诺塔 215
6.16 选美比赛 217
第7章 数据结构趣题 222
7.1 顺序表的就地逆置 222
7.2 动态数列排序 224
7.3 在原表空间进行链表的归并 227
7.4 约瑟夫环 232
7.5 二进制/八进制转换器 236
7.6 回文字符串的判定 241
7.7 括号匹配 245
7.8 魔王语言翻译 249
7.9 动态双向链表的应用 253
7.10 判断完全二叉树 259
7.11 动画模拟创建二叉树 263
7.12 打印符号三角形 267
7.13 递归函数的非递归求解 271
7.14 任意长度整数加法 274
第8章 数值计算问题 282
8.1 递推化梯形法求解定积分 282
8.2 求解低阶定积分 285
8.3 迭代法开平方运算 288
8.4 牛顿法解方程 291
8.5 欧拉方法求解微分方程 293
8.6 改进的欧拉方法求解微分方程 295
8.7 雅可比迭代公式求解线性方程组 298
第9章 综合题 302
9.1 破碎的砝码 302
9.2 计算24的问题 305
9.3 马踏棋盘 311
9.4 0-1背包问题 317
9.5 八皇后问题求解 323
9.6 简易文件加密/解密系统 327
第10章 算法设计与数据结构面试题精粹 335
10.1 常见的算法设计题 335
10.2 常见的数据结构题 374
第11章 ACM程序设计竞赛题目选讲 398
11.1 奥斯卡奖章 398
11.2 准备就绪? 403
11.3 兔子 406
11.4 阶乘之和 412