上篇 高级语言程序设计基础 3
第1章 C++语言概述 3
1.1 C++语言简介 3
1.2 C++语言的基本组成 4
1.2.1 基本字符集 4
1.2.2 词法记号 4
1.2.3 语句 4
1.2.4 标准函数库 5
1.3 数据类型 5
1.3.1 常量 5
1.3.2 变量 8
1.4 C++的运算规则与表达式 9
1.4.1 C++语言的运算规则 9
1.4.2 算术运算符与算术表达式 10
1.4.3 自增、自减运算 11
1.4.4 赋值运算符和赋值表达式 11
1.4.5 组合赋值运算符与组合赋值表达式 12
1.4.6 关系运算符与关系表达式 13
1.4.7 逻辑运算符与逻辑表达式 13
1.4.8 条件运算符与条件表达式 15
1.5 C++程序的基本结构、编写与实现 15
1.5.1 C++程序的基本结构 15
1.5.2 C++程序的编写与实现 18
小结 19
习题1 20
第2章 函数 21
2.1 函数的声明和调用 21
2.1.1 函数的声明 21
2.1.2 函数的调用 22
2.2 函数间的参数传递 23
2.2.1 值传递 23
2.2.2 函数参数为指针类型 24
2.3 带默认参数的函数 24
2.4 变量的存储属性 25
2.4.1 动态存储方式与静态存储方式 25
2.4.2 局部变量的存储属性 26
2.4.3 全局变量的存储属性 28
小结 30
习题2 30
第3章 数组、指针和结构 32
3.1 数组 32
3.1.1 一维数组 32
3.1.2 多维数组 33
3.1.3 字符数组和字符串 35
3.2 指针 38
3.2.1 指针的概念 38
3.2.2 指针变量定义 39
3.2.3 指针运算 39
3.3 指针与数组 41
3.3.1 指向数组的指针 41
3.3.2 指向字符串的指针 44
3.3.3 指针数组和指向指针的指针 45
3.4 指针与函数 46
3.4.1 指向函数的指针 46
3.4.2 返回指针值的函数 48
3.5 结构类型 49
3.5.1 结构类型的概念与定义 49
3.5.2 结构变量的说明 50
3.5.3 引用结构中的成员 51
3.5.4 结构的初始化 51
3.6 结构数组 51
3.7 结构指针 53
3.8 在函数之间传递结构 54
小结 56
习题3 57
第4章 C++类及其对象的封装性 58
4.1 从结构到类 58
4.1.1 复习结构 58
4.1.2 从结构提高到类 59
4.1.3 对象的创建和使用 63
4.2 类的成员函数 65
4.2.1 成员函数的定义方式 65
4.2.2 成员函数的访问属性 66
4.2.3 成员函数的执行效率 67
4.2.4 成员函数的存储方式 69
4.3 构造函数 71
4.3.1 对象初始化的要求 71
4.3.2 构造函数的形式 72
4.3.3 拷贝构造函数 77
4.4 析构函数 79
4.4.1 析构函数的形式 79
4.4.2 调用顺序 80
4.5 动态存储 81
4.5.1 内存分配与释放 81
4.5.2 避免内存泄漏 83
小结 84
习题4 85
第5章 引用、友元和重载 87
5.1 引用 87
5.1.1 引用的概念与理解 87
5.1.2 在函数通信中大显身手 89
5.2 友元 93
5.2.1 友元的定义 93
5.2.2 友元函数 94
5.2.3 友元成员 95
5.2.4 友元类 97
5.3 重载 99
5.3.1 函数重载 99
5.3.2 运算符重载 103
小结 114
习题5 114
第6章 继承 116
6.1 合成与继承 116
6.2 单继承 118
6.2.1 派生类的声明和构成 118
6.2.2 派生类成员的访问 119
6.2.3 派生类的构造函数和析构函数 126
6.3 多继承 132
6.3.1 声明多继承的方法 132
6.3.2 多继承派生类的构造函数 135
6.3.3 多继承引起的二义性问题 138
6.3.4 虚基类 141
小结 146
习题6 147
第7章 多态 150
7.1 继承呼唤多态 150
7.2 虚函数 151
7.2.1 虚函数的定义与调用 151
7.2.2 虚函数的特例 155
7.2.3 避免虚函数的误用 156
7.3 纯虚函数与抽象类 159
7.3.1 纯虚函数 159
7.3.2 抽象类 160
小结 162
习题7 162
第8章 模板 164
8.1 模板的概念 164
8.2 函数模板 164
8.2.1 函数模板和模板函数 164
8.2.2 函数模板的使用 167
8.2.3 重载模板函数 170
8.3 类模板 170
8.3.1 模板和模板类 170
8.3.2 类模板的派生 173
小结 173
习题8 173
下篇 算法分析与设计 177
第9章 算法导引 177
9.1 算法基础 177
9.1.1 算法 177
9.1.2 作为技术的算法 178
9.2 算法的设计和性能度量 179
9.2.1 函数的增长 179
9.2.2 标准记号与常用函数 182
小结 185
习题9 186
第10章 基本数据结构 187
10.1 线性表 187
10.1.1 线性表的逻辑结构 187
10.1.2 线性表的顺序表示和实现 187
10.1.3 线性表的链式表示和实现 189
10.2 栈和队列 192
10.2.1 栈 192
10.2.2 队列 195
10.3 哈希表 199
10.3.1 哈希表简介 199
10.3.2 哈希函数的构造方法 201
10.3.3 处理冲突的方法 203
10.3.4 哈希表的查找及其分析 205
10.4 树 206
10.4.1 树、二叉树和森林的基本概念 206
10.4.2 二叉树的遍历和树的遍历 211
10.4.3 二叉树的计数 212
小结 213
习题10 213
第11章 经典设计和分析技术 214
11.1 递归与分治法 214
11.1.1 二分检索问题 214
11.1.2 递归的概念 215
11.1.3 分治法的基本思想 216
11.1.4 分治法的应用 217
11.2 贪心算法 228
11.2.1 活动选择问题 228
11.2.2 贪心算法的基本思想 230
11.2.3 贪心算法的应用 231
11.3 动态规划 234
11.3.1 钢条切割问题 235
11.3.2 动态规划的基本思想 237
11.3.3 动态规划的应用 239
11.4 经典算法蕴涵的计算思维在其他学科的泛化 242
习题11 244
第12章 图的算法 246
12.1 图的基本算法 246
12.1.1 图的表示 246
12.1.2 广度优先搜索 258
12.1.3 深度优先搜索 259
12.1.4 拓扑排序 260
12.2 最小生成树 262
12.2.1 最小生成树的形成 262
12.2.2 Kruskal算法和Prim算法 263
12.3 单源最短路径 269
12.3.1 有向无环图的单源最短路径 270
12.3.2 Dijkstra算法 272
12.4 图算法蕴涵的计算思维在其他学科的泛化 274
习题12 275
参考文献 277