前言
上篇 算法与数据结构基础
第1章 基础算法思想1
1.1 编程的灵魂:数据结构+算法1
1.2 算法的作用:猜价格游戏2
1.2.1 算法的作用2
1.2.2 实例:看商品猜价格2
1.3 枚举(穷举)算法思想6
1.3.1 算法思路6
1.3.2 实例:填数游戏6
1.3.3 实例:填运算符8
1.4 递推算法思想11
1.4.1 算法思路11
1.4.2 顺推实例:斐波那契数列11
1.4.3 逆推实例:该存多少钱13
1.5 递归算法思想14
1.5.1 算法思路14
1.5.2 实例:求阶乘15
1.5.3 实例:数制转换17
1.6 分治算法思想19
1.6.1 算法思路19
1.6.2 实例:乒乓球比赛日程安排20
1.7 贪婪算法思想23
1.7.1 算法思路24
1.7.2 实例:找零钱24
1.8 试探算法思想26
1.8.1 算法思路26
1.8.2 实例:生成彩票号码组合27
1.9 模拟算法30
1.9.1 算法思路30
1.9.2 实例:猜数游戏30
1.9.3 实例:掷骰子游戏31
1.10 算法的评价32
1.10.1 算法评价原则32
1.10.2 算法的效率33
1.11 上机实践34
第2章 简单数据结构36
2.1 最简单的结构:线性表36
2.1.1 线性表的概念36
2.1.2 操作顺序表37
2.1.3 操作链表44
2.1.4 实例:用链表制作通讯录53
2.2 后进先出结构:栈56
2.2.1 栈的概念56
2.2.2 操作栈57
2.2.3 实例:算术表达式求值62
2.3 先进先出结构:队列68
2.3.1 什么是队列68
2.3.2 操作队列69
2.3.3 循环队列的操作72
2.3.4 实例:银行排号程序74
2.4 上机实践77
第3章 复杂数据结构79
3.1 层次关系结构:树79
3.1.1 树的概念79
3.1.2 二叉树的概念80
3.1.3 二叉树的存储82
3.1.4 操作二叉树84
3.1.5 遍历二叉树88
3.1.6 测试二叉树92
3.1.7 线索二叉树95
3.1.8 最优二叉树(赫夫曼树)102
3.2 网状关系:图111
3.2.1 图的定义和基本术语111
3.2.2 图的存储115
3.2.3 图的创建117
3.2.4 图的遍历123
3.2.5 最小生成树128
3.2.6 最短路径132
3.3 上机实践136
第4章 常用算法——排序137
4.1 排序概述137
4.1.1 排序算法分类137
4.1.2 数据准备138
4.2 冒泡排序法139
4.2.1 冒泡排序法概述139
4.2.2 改进的冒泡排序法142
4.3 快速排序法143
4.3.1 算法描述143
4.3.2 算法实现144
4.4 简单选择排序法146
4.5 堆排序法148
4.5.1 算法描述148
4.5.2 算法实现150
4.6 直接插入排序法152
4.6.1 算法描述152
4.6.2 算法实现153
4.7 希尔(Shell)排序法154
4.7.1 算法描述154
4.7.2 算法实现155
4.8 合并排序法157
4.8.1 算法描述157
4.8.2 算法实现158
4.9 排序算法的选择161
4.9.1 选择基准161
4.9.2 各种排序算法的优缺点162
4.10 上机实践163
第5章 常用算法——查找164
5.1 查找的基本概念164
5.2 简单查找165
5.2.1 顺序查找165
5.2.2 折半查找167
5.3 二叉排序树170
5.3.1 二叉排序树的定义170
5.3.2 插入节点170
5.3.3 查找节点173
5.3.4 删除节点174
5.4 索引查找178
5.4.1 索引的概念178
5.4.2 索引查找算法180
5.5 散列表184
5.5.1 散列表概述184
5.5.2 构造散列函数185
5.5.3 处理冲突187
5.5.4 创建和查找散列表188
5.6 上机实践190
下篇 用算法与数据结构解决实际问题
第6章 数学问题191
6.1 有趣的整数191
6.1.1 完数191
6.1.2 亲密数193
6.1.3 水仙花数195
6.1.4 自守数196
6.1.5 最大公约数和最小公倍数197
6.2 素数200
6.2.1 求素数200
6.2.2 回文数203
6.2.3 哥德巴赫猜想206
6.3 阶乘209
6.3.1 用递归计算阶乘210
6.3.2 大数阶乘211
6.4 求π的近似值214
6.4.1 概率法214
6.4.2 割圆法216
6.4.3 公式法217
6.4.4 计算任意位数的π218
6.5 方程求解222
6.5.1 高斯消元法解线性方程组222
6.5.2 二分法解非线性方程227
6.5.3 牛顿迭代法解非线性方程228
6.6 矩阵的运算230
6.6.1 矩阵的加法和乘法运算230
6.6.2 多维矩阵转一维矩阵233
6.6.3 逆矩阵235
6.6.4 稀疏矩阵238
6.7 一元多项式的运算240
6.7.1 多项式加法241
6.7.2 多项式减法245
6.8 上机实践248
第7章 数据结构问题250
7.1 约瑟夫环250
7.2 大整数四则运算252
7.2.1 使用数组进行大整数运算252
7.2.2 使用链表进行大整数运算264
7.3 进制转换271
7.3.1 进制转换的分析272
7.3.2 进制转换实现代码272
7.4 括号匹配277
7.5 中序式转后序式280
7.5.1 后序表达式280
7.5.2 算法实现281
7.5.3 后序表达式求值284
7.6 停车场管理286
7.6.1 问题分析287
7.6.2 算法实现287
7.7 迷宫求解297
7.7.1 迷宫问题297
7.7.2 算法实现297
7.7.3 求迷宫的所有路径304
7.8 LZW压缩307
7.8.1 LZW的相关概念308
7.8.2 LZW压缩过程308
7.8.3 LZW压缩的实现310
7.8.4 LZW解压缩过程314
7.8.5 解压缩函数315
7.8.6 集成压缩和解压缩功能318
7.9 上机实践320
第8章 经典算法问题321
8.1 不定方程问题321
8.1.1 百钱买百鸡321
8.1.2 存钱利息