第1章 引论1 本书讨论的内容2 数学知识复习1 指数2 对数3 级数4 模运算5 证明方法3 递归的简单介绍4 C++类1 基本class语法2 特别的构造函数语法与访问函数3 接口与实现的分离4 vector和5 C++细节1 指针2 参数传递3 返回值传递4 引用变量5 三大函数:析构函数、复制构造函数和operator=6 C风格的数组和字符串6 模板1 函数模板2 类模板3 Object、Comparable和例子4 函数对象5 类模板的分离编译7 使用矩阵1 数据成员、构造函数和基本访问函数2 operator[]3 析构函数、复制赋值和复制构造函数小结练习参考文献第2章 算法分析1 数学基础2 模型3 要分析的问题4 运行时间计算1 一个简单的例子2 一般法则3 最大子序列和问题的解4 运行时间中的对数5 检验你的分析6 分析结果的准确性小结练习参考文献第3章 表、栈和队列1 抽象数据类型(ADT)2 表ADT1 表的简单数组实现2 简单链表3 STL中的向量和表1 迭代器2 示例:对表使用3 const_4 向量的实现5 表的实现6 栈ADT1 栈模型2 栈的实现3 应用7 队列ADT1 队列模型2 队列的数组实现3 队列的应用小结练习第4章 树1 预备知识1 树的实现2 树的遍历及应用2 二叉树1 实现2 一个例子——表达式树3 查找树ADT——二叉查找树1 2 findMin和findM3 4 5 析构函数和复制赋值操作符6 平均情况分析4 AVL树1 单旋转2 双旋转5 伸展树1 一个简单的想法(不能直接使用)2 伸展6 树的遍历7 B树8 标准库中的set和1 2 3 set和map的实现4 使用几个map的例子小结练习参考文献第5章 散列1 基本思想2 散列函数3 分离链接法4 不使用链表的散列表1 线性探测2 平方探测3 双散列5 再散列6 标准库中的散列表7 可扩散列小结练习参考文献第6章 优先队列(堆)1 模型2 一些简单的实现3 二叉堆1 结构性质2 堆序性质3 基本的堆操作4 堆的其他操作4 优先队列的应用1 选择问题2 事件模拟5 d堆6 左式堆1 左式堆性质2 左式堆操作7 斜堆8 二项队列1 二项队列结构2 二项队列操作3 二项队列的实现9 标准库中的优先队列小结练习参考文献第7章 排序1 预备知识2 插入排序1 算法2 插入排序的STL实现3 插入排序的分析3 一些简单排序算法的下界4 谢尔排序5 堆排序6 归并排序7 快速排序1 选取枢纽元2 分割策略3 小数组4 实际的快速排序例程5 快速排序的分析6 选择问题的线性期望时间算法8 间接排序1 vector不运行2 智能指针类3 重载operator<4 使用“*”解引用指针5 重载类型转换操作符6 随处可见的隐式类型转换7 双向隐式类型转换会导致歧义8 指针减法是合法的9 排序算法的一般下界10 桶排序11 外部排序1 为什么需要新算法2 外部排序模型3 简单算法4 多路合并5 多相合并6 替换选择小结练习参考文献第8章 不相交集类1 等价关系2 动态等价性问题3 基本数据结构4 灵巧求并算法5 路径压缩6 按秩求并和路径压缩的最坏情形7 一个应用小结练习参考文献第9章 图论算法1 若干定义2 拓扑排序3 最短路径算法1 无权最短路径2 Dijkstra算法3 具有负边值的图4 无环图5 所有顶点对的最短路径6 最短路径举例4 网络流问题5 最小生成树1 Prim算法2 Kruskal算法6 深度优先搜索的应用1 无向图2 双连通性3 欧拉回路4 有向图5 查找强分支7 NP完全性介绍1 难与易2 NP类3 NP完全问题小结练习参考文献第10章 算法设计技巧1 贪心算法1 一个简单的调度问题2 赫夫曼编码3 近似装箱问题2 分治算法1 分治算法的运行时间2 最近点问题3 选择问题4 一些算术问题的理论改进3 动态规划1 用表代替递归2 矩阵乘法的顺序安排3 最优二叉查找树4 所有点对最短路径4 随机化算法1 随机数生成器2 跳跃表3 素性测试5 回溯算法1 公路收费点重建问题2 博弈小结练习参考文献第11章 摊还分析1 一个无关的智力问题2 二项队列3 斜堆4 斐波那契堆1 切除左式堆中的结点2 二项队列的懒惰合并3 斐波那契堆操作4 时间界的证明5 伸展树小结练习参考文献第12章 高级数据结构及其实现1 自顶向下伸展树2 红黑树1 自底向上插入2 自顶向下红黑树3 自顶向下删除3 确定性跳跃表4 AA树5 treap树6 k-d树7 配对堆小结练习参考文献附录 类模板的分离编译索引