上篇C++程序设计基础 1
第1章C++语言概述 1
1.1 C++语言简介 1
1.2最简单的C++程序 1
1.3 C++语言的基本组成 4
1.3.1基本字符集 4
1.3.2词法记号 4
1.3.3语句 4
1.3.4标准函数库 5
1.3.5简单C++++程序结构 5
1.4 C++程序的基本结构 7
1.5 C++程序设计的编写与实现 8
习题1 9
实验训练1 9
第2章 数据类型与运算规则 10
2.1数据类型 10
2.2常量与变量 11
2.2.1常量 11
2.2.2变量 13
2.3 C++的运算规则与表达式 14
2.3.1 C++的运算规则 14
2.3.2算术运算符与算术表达式 16
2.3.3自增、自减运算 16
2.3.4赋值运算符和赋值表达式 17
2.3.5组合赋值运算符与组合赋值表达式 17
2.3.6关系运算符与关系表达式 18
2.3.7逻辑运算符与逻辑表达式 19
2.3.8条件运算符与条件表达式 20
2.4其他运算 20
2.4.1位运算 20
2.4.2逗号运算符 22
2.4.3“…”和“→”运算符 22
2.4.4“()”和“[]”运算符 22
2.4.5“*”和“&”运算符 22
2.4.6 (pe)运算符 22
2.5混合运算及数据类型转换 23
习题2 23
实验训练2 24
第3章 数组与指针 25
3.1数组 25
3.1.1一维数组 25
3.1.2多维数组 28
3.1.3字符数组和字符串 31
3.2指针 34
3.2.1指针的概念 34
3.2.2指针变量定义 34
32.3指针运算 35
3.3指针与数组 36
3.3.1指向数组的指针 36
3.3.2指向字符串的指针 39
3.3.3指针数组和指向指针的指针 40
3.4指针与函数 42
3.4.1指向函数的指针 42
3.4.2返回指针值的函数 44
习题3 45
实验训练3 45
第4章 函数 46
4.1函数的声明和调用 46
4.1.1函数的声明 46
4.1.2函数的调用 47
4.2函数间的参数传递 48
4.2.1值传递 49
4.2.2函数参数为指针类型 49
4.3带默认参数的函数 50
4.4变量的存储属性 51
4.4.1动态存储方式与静态存储方式 51
4.4.2局部变量的存储属性 51
4.4.3全局变量的存储属性 54
习题4 56
实验训练4 56
第5章 结构类型及其他构造类型 57
5.1结构类型 57
5.1.1结构类型的概念与定义 57
5.1.2结构变量的说明 58
5.1.3引用结构中的成员 59
5.1.4结构的初始化 60
5.2结构数组 61
5.3结构指针 64
5.4在函数之间传递结构 67
5.4.1向函数传递结构的成员 67
5.4.2向函数传递整个结构 67
5.4.3向函数传递结构的地址 69
5.5联合类型 70
5.6枚举类型 72
5.6.1枚举的概念 72
5.6.2枚举运算 72
习题5 73
实验训练5 74
第6章C++类及其对象的封装性 75
6.1面向对象的基本概念与基本特征 75
6.1.1面向对象的基本概念 75
6.1.2面向对象的基本特征 77
6.2类的声明和对象的定义 78
6.2.1类和对象的关系 78
6.2.2声明类类型 78
6.2.3定义对象的方法 80
6.2.4类和结构体类型的异同 82
6.3类的成员函数 83
6.3.1成员函数的性质 83
6.3.2在类外定义成员函数 83
6.3.3 inne成员函数 84
6.3.4成员函数的存储方式 87
6.4对象成员的引用 88
6.4.1通过对象名和成员运算符访问对象中的成员 88
6.4.2通过指向对象的指针访问对象中的成员 89
6.5构造函数 90
6.5.1对象的初始化 90
6.5.2构造函数的作用 91
6.5.3带参数的构造函数 92
6.5.4用参数初始化表对数据成员初始化 93
6.5.5构造函数的重载 93
6.5.6 使用默认参数的构造函数 95
6.6析构函数 98
6.7动态存储 99
习题6 101
实验训练6 101
第7章 引用、友元和重载 102
7.1引用 102
7.1.1引用的概念 102
7.1.2引用的应用 103
7.1.3引用作为函数参数 104
7.2友元 107
7.2.1友元的定义 107
7.2.2友元函数 107
7.2.3友元成员 108
7.2.4友元类 111
7.3重载 112
7.3.1函数重载 112
7.3.2运算符重载 116
习题7 127
实验训练7 128
第8章 继承与派生 129
8.1继承与派生的概念 129
8.2派生类的声明 130
8.3派生类的构成 130
8.4派生类成员的访问属性 131
8.4.1公有继承 132
8.4.2私有继承 133
8.4.3保护成员和保护继承 135
8.4.4多级派生时的访问属性 138
8.5派生类的构造函数和析构函数 139
8.5.1简单的派生类的构造函数 139
8.5.2有子对象的派生类的构造函数 141
8.5.3多级派生时的构造函数 142
8.5.4派生类的析构函数 144
8.6多继承 144
8.6.1声明多继承的方法 145
8.6.2多继承派生类的构造函数 145
8.6.3多继承的析构函数 146
8.6.4多继承引起的二义性问题 147
8.7虚基类 150
8.7.1虚基类的概念 150
8.7.2虚基类的初始化 151
习题8 153
实验训练8 155
第9章 多态性与虚函数 156
9.1多态性 156
9.1.1多态性的概念 156
9.1.2编译时的多态性 156
9.1.3运行时的多态性 157
9.2虚函数 159
9.2.1虚函数的作用 159
9.2.2虚函数的声明 160
9.2.3虚析构函数 162
9.3纯虚函数与抽象类 163
9.3.1纯虚函数 163
9.3.2抽象类 165
习题9 167
实验训练9 168
第10章 模板 169
10.1模板的概念 169
10.2函数模板 169
10.2.1函数模板和模板函数 169
10.2.2重载模板函数 173
10.3类模板 173
10.3.1类模板和模板类的概念 173
10.3.2类模板的派生 175
习题10 176
实验训练10 176
下篇 数据结构一一面向对象方法与C++描述 177
第11章 数据结构基本概念 177
11.1数据结构的概念和术语 177
11.2抽象数据类型 178
11.2.1数据类型 178
11.2.2数据抽象与抽象数据类型 179
11.3算法和算法分析 179
11.3.1算法 179
11.3.2算法设计的要求 180
11.3.3算法效率的度量 180
11.4数据结构的抽象层次 182
习题11 183
第12章 线性表 184
12.1线性表的定义 184
12.1.1线性表的逻辑结构 184
12.1.2线性表的抽象类定义 184
12.2线性表的顺序表示和实现 185
12.2.1线性表的顺序表示 185
12.2.2 序表类的定义 186
12.2.3顺序表类的实现 187
12.3线性表的链式表示和实现 189
12.3.1线性表的链式表示 189
12.3.2抽象链表类的定义 190
12.3.3抽象链表类各成员函数的实现 191
12.4单链表 192
12.4.1单链表的定义 192
12.4.2单链表类的定义 193
12.4.3单链表的常用成员函数的实现 193
12.4.4单链表举例——一元多项式加法 196
12.5循环链表 198
12.5.1循环链表的定义 198
12.5.2循环链表类的定义 199
12.5.3循环链表常用函数的实现 199
12.5.4循环链表举例——约瑟夫问题 203
12.6双向链表 203
12.6.1双向链表的定义 203
12.6.2双向链表类的定义 204
12.6.3双向链表的常用成员函数的实现 205
习题12 208
实验训练12 209
第13章 堆栈与队列 210
13.1堆栈的概念及其运算 210
13.2抽象堆栈类的定义 210
13.3堆栈的定义及其实现 211
13.3.1顺序栈的定义 211
13.3.2顺序栈类的定义及典型成员函数的实现 211
13.3.3多栈共享空间问题 214
13.3.4链栈的定义 215
13.3.5链式栈类的定义及典型成员函数的实现 216
13.4堆栈的应用举例 219
13.4.1数制转换 219
13.4.2一个趣味游戏——迷宫问题 220
13.5队列的概念及其运算 223
13.6 抽象队列类的定义 223
13.7队列的定义及其实现 224
13.7.1队列的顺序存储结构 224
13.7.2循环队列的定义 225
13.7.3顺序循环队列类的定义及常用成员函数的实现 226
13.7.4链式队列的定义 228
13.7.5链式队列类的定义及常用成员函数的实现 228
13.7.6链式队列的应用举例 231
13.7.7优先级队列的定义 232
13.7.8优先级队列类的定义及常用成员函数的实现 232
习题13 235
实验训练13 236
第14章 树与二叉树 237
14.1树、二叉树和森林的基本概念 237
14.1.1树 237
14.1.2二叉树 238
14.1.3树与森林的存储结构 243
14.2二叉树的抽象类和树的类 246
14.2.1二叉树的抽象类 246
14.2.2树的类 251
14.3二叉树的遍历和树的遍历 256
14.3.1二叉树的遍历 256
14.3.2树的遍历 260
14.4二叉排序树 262
14.5二叉树的计数 266
14.6哈夫曼树及其应用 267
14.6.1最优二叉树(哈夫曼树) 267
14.6.2哈夫曼编码 268
习题14 269
实验训练14 270
第15章图 271
15.1图的基本概念 271
15.1.1图的定义 271
15.1.2图的术语 272
15.1.3图的基本操作 273
15.1.4图的存储表示 274
15.2图的类的定义 278
15.2.1图的邻接矩阵类 278
15.2.2图的邻接表类 282
15.3图的遍历 288
15.3.1深度优先搜索DFS 288
15.3.2广度(或宽度)优先搜索BFS 289
15.4图的连通性与最小生成树 290
15.4.1无向图的连通分量和生成树 290
15.4.2最小生成树 290
15.4.3关节点和重连通分量 295
15.5最短路径 297
15.5.1图结点的可达性 297
15.5.2从某个源点到其余各顶点的最短路径 298
15.5.3 毎一对对顶点之间的最短路径 299
15.6 活动网络 301
15.6.1用顶点表示活动的网络(AOV网络) 301
15.6.2用边表示活动的网络(AOE网络) 302
习题15 304
实验训练15 305
第16章 查找与散列结构 306
16.1基本概念 306
16.2静态查找表 307
16.2.1顺序表的查找 307
16.2.2有序表的查找 308
16.2.3索引顺序表的查找 310
16.3动态查找表 311
16.4 Hash表及其查找 313
16.4.1 Hash表 313
16.4.2 Hash函数的构造方法 314
16.4.3处理冲突的方法 317
16.4.4 Hash表的查找及其分析 319
习题16 320
实验训练16 321
第17章 排序 322
17.1排序的基本概念 322
17.2插入排序 323
17.2.1直接插入排序 324
17.2.2其他插入排序 325
17.2.3希尔排序 328
17.3快速排序 329
17.4选择排序 332
17.4.1简单选择排序 332
17.4.2锦标赛排序 332
17.4.3堆排序 335
17.5归并排序 340
17.5.1归并 340
17.5.2迭代的归并排序算法 341
17.6基数排序 342
17.6.1多关键字排序 342
17.6.2链式基数排序 343
习题17 345
实验训练17 345
参考文献 346