图书目录

第1 章程序测试与运行时间度量 1

11 程序的规格说明与测试 1

111 程序的规格说明 1

112 编程练习:排序函数的规格说明 1

113 程序测试 2

114 编程练习:排序的测试 2

115 随机数的生成 3

116 自动化测试 3

117 编程练习:排序的自动测试 3

12 程序的运行时间度量 4

121取得CPU时间 4

122 统计排序函数的运行时间5

123 编程练习:排序的运行时间度量 5

124 理解算法的时间复杂度 5

125 编程练习:最大连续子序列和算法运算时间的比较 7 小结7

第2 章线性表和串的实现及其应用 8

21标准库数据结构vector和list的使用 8

211标准库数据结构vector 8

212线性表vector的应用 12

213编程练习:vector的应用 12

214标准库数据结构list 13

215 线性表的应用 14

216 编程练习:线性表的应用 15

217 编程练习:多项式的表示和运算16

218 编程练习:集合运算 17

22 抽象数据类型线性表的实现及其测试 18

221 线性表抽象数据类型定义18

222 编程练习:使用数组表示线性表20

223 使用单链表表示线性表24

224 编程练习:熟悉单链表 24

225 编程练习:线性表的单链表实现25

23 串的应用 27

231数据结构串string 27

232 编程练习:索引表的生成 32

233 编程练习:一个行编辑器的实现34 小结 40

第3 章栈与队列的实现和应用41

31 标准库栈的使用 41

311STL模板类stack 41

312 编程练习:熟悉栈的操作和栈的应用42

32 栈的实现 43

321 栈的定义 43

322 编程练习:栈的实现 44

33 队列的应用 45

331STL模板队列queue 45

332 队列应用例子 46

34 队列的实现 49

341 队列的定义 49

342 编程练习:队列的实现 50

35 栈和队列的应用 51

351 车厢调度问题 51

352 编程练习:车厢调度问题 54

353 编程练习:服务队列模拟问题 55 小结 56

第4 章递归 57

41 递归算法 57

411 递归函数的例子 57

412 一摞烙饼的排序 57

413 编程练习:递归 59

42 分治法 59

421 汉诺塔 59

422 归并排序 60

423 编程练习:归并排序的实现 61

424 递归算法的分析 62

43 回溯 62

431 八皇后问题 62

432 迷宫问题 65

433 编程练习:回溯 67

小结 67

第5 章二叉树的实现和应用 68

51 二叉树的表示68

511 二叉链表 68

512 二叉链表的构造 68

513 编程练习:二叉树的二叉链表表示70

514 编程练习:二叉树的输出 70

515 二叉树的顺序结构 70

52 二叉树的遍历71

521 二叉树的深度优先遍历71

522 编程练习:二叉树的遍历和构造73

523 编程练习:二叉树的构造 74

524 二叉树的广度优先遍历74

525 编程练习:树的层次遍历 75

53 Human 编码的实现及其应用 75

531 Human 编码及其无损压缩 75

532实现基于Human编码的压缩和解压缩 75 小结 78

第6 章查找的实现与应用 79

61 顺序查找 79

611 简单查找 79

612 编程练习:顺序查找的应用和实现81

613 条件查找 81

614 函数对象 83

615 编程练习:条件查找的应用 85

62 二分查找的应用 85

621 返回存在性的二分查找85

622 编程练习:二分查找的应用和实现86

623 返回位置的二分查找 87

624 编程练习:查找中间数 90

63 二叉查找树 92

631 二叉查找树的插入 92

632 编程练习:二叉查找树的插入 93

633 二叉查找树的查找 94

634 编程练习:二叉查找树的查找 95

635 二叉查找树的删除 96

636 编程练习:二叉查找树的删除 96

64 平衡二叉查找树 98

641AVL树的归纳定义 98

642AVL树的表示和插入 98

65 线索二叉树 100

651 线索二叉树的表示100

652 编程练习:线索二叉树的遍历和插入 102

66 散列表 102 小结 104

第7 章排序的实现与应用 105

71 快速排序 105

72 稳定排序 106

73 部分排序 106

74 堆排序 108

75 归并排序 109 小结 112

第8 章图算法及其应用 113

81 图的邻接矩阵表示 113

811图的邻接矩阵——C风格113

812图的邻接矩阵——C++风格 114

813 编程练习:图的邻接矩阵表示114

82 图的邻接表表示 119

821邻接表——C风格 119

822邻接表——C++风格120

823 编程练习:图的邻接表表示 121

83 拓扑排序 121

831 拓扑排序算法 121

832 拓扑排序应用举例122

84 广度优先遍历124

841 广度优先遍历算法124

842 广度优先遍历应用举例 125

85 深度优先遍历126

851 深度优先遍历算法126

852 深度优先遍历应用举例 127

86 最小生成树 129

861 最小生成树算法 129

862 最小生成树应用举例130

863 编程练习:最小生成树 133

87最短路径——从算法到代码 133

871 Dijkstra 算法 133

872 Dijkstra 算法的细化 133

873Dijkstra算法的C/C++实现 134

874 编程练习:最短路径 135

88 图论应用项目136

881 TSP 问题 136

882 医院选址问题 136

883 地铁建设问题 137

884 地铁乘车指引问题138 小结 139

第9章标准模板库STL简介 140

91 容器 140

911 容器的概念 140

912 顺序容器 141

913 联合容器 142

914 优先队列 146

92 迭代器 147

921C++标准库迭代器简介 148

922 迭代器的使用 150

923 编程练习:容器的应用 157

93 算法 157

931 不改变容器的算法159

932 改变容器的算法 162

933 排序算法 166

934 堆运算 169

935 集合运算 171

936 最大最小运算 173

94 函数对象 174

941遍历算法foreach的函数对象 174

942排序算法sort中的函数对象177

943 顺序查找算法中的函数对象 180

944 编程练习:函数对象 181

945 二分查找中的函数对象 182

946 编程练习:通用查找函数 183

947 预定义函数对象 183

948 可转换函数对象 185

949 编程练习:可转换函数对象的应用 188 小结 188

附录A问题和软装置列表189 A1 线性表和字符串的实现和应用 189 A2 栈与队列的实现和应用 189 A3 递归 189 A4 二叉树的实现和应用 190 A5 查找的实现与应用 190 A6 排序的实现与应用 190 A7 图算法及其应用 191

附录B实验报告参考格式192

附录C部分参考程序 193

参考文献 215

索引 216