第1篇程序设计基础及数据结构基础 3
第1章 数组 3
1.1 一维数组的声明与字符数组 3
1.1.1 一维数组的声明与初始化 3
1.1.2 C风格字符串与字符数组 4
1.2 二维数组 5
1.2.1 二维数组的声明与初始化 5
1.2.2 行优先存储与列优先存储 7
1.2.3 二维数组的动态声明 8
1.3 数组指针、指针数组与数组名的指针操作 9
1.3.1 指针运算——算术运算、关系运算 9
1.3.2 指针数组与数组指针 10
1.3.3 指针运算在数组中的应用 11
1.4 数组的应用 15
1.4.1 线性表的顺序存储 15
1.4.2 对称矩阵的压缩 16
本章习题 16
第2章 字符串 23
2.1 字符串与子串、子序列 23
2.2 C风格字符串 23
2.3 标准库提供的字符串处理函数 24
2.3.1 strlen 25
2.3.2 strcmp 25
2.3.3 strcat与strcpy 26
2.3.4 memcpy与memset 27
2.4 字符串的实际应用 27
2.4.1 字符串包含问题 27
2.4.2 字符串转换为数字 30
2.4.3 其他应用 32
本章习题 35
第3章 结构体、共用体与枚举 39
3.1 结构体struct 39
3.1.1 结构体的定义 39
3.1.2 结构体中的位字段 40
3.2 共用体union 41
3.3 枚举 45
3.4 sizeof运算符 46
3.4.1 sizeof的使用方法 46
3.4.2 sizeof的结果 47
3.4.3 与strlen()比较 47
3.4.4 指针、引用、汉字及数组的sizeof操作 48
3.4.5 struct的空间计算 49
3.4.6 union的空间计算 54
3.4.7 枚举的空间计算 55
本章习题 55
第4章 运算符及其优先级 63
4.1 赋值语句 63
4.2 自增与自减运算符 64
4.2.1 前缀运算与后缀运算 64
4.2.2 自增、自减运算符作用的对象 65
4.2.3 ++、--运算符的结合方向 66
4.3 关系与逻辑运算符 66
4.4 位运算符 67
4.4.1 与、或、非及异或运算符 68
4.4.2 移位运算符 69
4.5 C++基本类型的类型转换 72
4.5.1 赋值转换 72
4.5.2 表达式的转换 72
4.5.3 显式转换 74
4.5.4 其他转换 75
4.6 运算符优先级表 75
本章习题 77
第5章 C预处理器、作用域、static、const以及内存管理 86
5.1 C预处理器 86
5.1.1 宏定义与宏替换 86
5.1.2 文件包含 87
5.1.3 条件编译 87
5.2 全局变量与局部变量 88
5.3 static 90
5.3.1 static的作用 90
5.3.2 类中static的作用 91
5.4 const 94
5.4.1 常量 94
5.4.2 指针和const修饰符 95
5.4.3 修饰函数参数与返回值 96
5.4.4 const在类中的应用 98
5.5 内存管理与释放 100
5.5.1 C语言内存操作函数 101
5.5.2 C++内存管理 102
本章习题 105
第6章 函数 111
6.1 参数传递 111
6.2 内联函数 115
6.3 默认参数 115
6.4 函数重载 117
6.5 函数模版与泛型 117
6.5.1 函数模版 118
6.5.2 类模版 119
6.6 函数的递归 119
本章习题 121
第7章 指针与引用 127
7.1 指针 127
7.1.1 指针的声明 127
7.1.2 typedef 127
7.1.3 void指针 128
7.1.4 指向指针的指针 129
7.1.5 函数指针 129
7.2 引用 133
7.2.1 const引用 134
7.2.2 引用做类的数据成员 134
本章习题 134
第8章 类 137
8.1 访问标号 137
8.2 类成员简介 137
8.2.1 成员函数 137
8.2.2 构造函数 138
8.2.3 析构函数 142
8.2.4 构造函数与析构函数调用顺序 143
8.2.5 操作符重载 145
8.3 成员函数的重载、覆盖与隐藏 150
8.3.1 成员函数的重载 150
8.3.2 成员函数的覆盖 150
8.3.3 成员函数的隐藏 151
本章习题 152
第9章 面向对象编程 154
9.1 继承 154
9.1.1 基类成员在派生类中的访问属性 155
9.1.2 继承时导致的二义性 157
9.1.3 转换构造函数 161
9.1.4 类型转换函数 161
9.2 虚函数多态 162
9.2.1 静态联编与动态联编 163
9.2.2 虚函数表指针(vptr)及虚基类表指针(bptr) 167
9.2.3 虚拟继承时构造函数的书写 174
9.2.4 纯虚函数 174
9.3 动态运行时类型识别与显式转换 175
9.3.1 typeid 175
9.3.2 显式转换 175
本章习题 180
第10章 分治法、动态规划与贪心算法 186
10.1 分治法 186
10.2 动态规划 186
10.2.1 LCS问题 189
10.3 贪心算法 193
10.3.1 贪心算法与动态规划 193
本章习题 195
第11章 链表 197
11.1 单链表 197
11.2 快慢指针的概念及其应用 200
11.3 双链表 204
本章习题 207
第12章 栈与队列 209
12.1 栈 209
12.2 栈的应用 210
12.2.1 算术表达式的计算 210
12.3 Catalan数 211
12.3.1 Catalan数的应用 211
12.4 队列 212
12.4.1 队列的顺序存储 212
本章习题 213
第13章 树 216
13.1 树的基本概念和性质 216
13.2 二叉树 217
13.2.1 二叉树的性质及存储结构 218
13.2.2 二叉树的遍历 219
13.3 二叉树的应用 220
13.4 树的应用 225
13.4.1 二叉排序树 225
13.4.2 平衡二叉树 226
13.4.3 哈夫曼树及哈夫曼编码 229
13.5 并查集 230
本章习题 232
第14章 图 234
14.1 图的基本概念 234
14.2 图的存储及基本操作 235
14.2.1 邻接矩阵法 235
14.2.2 邻接表法 236
14.3 图的遍历 237
14.3.1 深度优先搜索 237
14.3.2 广度优先搜索 237
14.4 图遍历算法的应用 238
14.5 图的基本应用 242
14.5.1 最小生成树 242
14.5.2 最短路径 243
14.5.3 拓扑排序 245
本章习题 246
第15章 排序 250
15.1 插入排序 250
15.1.1 直接插入排序 250
15.1.2 希尔排序 251
15.2 交换排序 252
15.2.1 冒泡排序 252
15.2.2 快速排序 252
15.3 选择排序简介 257
15.3.1 简单选择排序 257
15.3.2 堆排序 258
15.4 归并排序 261
15.4.1 二路归并排序 261
15.4.2 多路归并排序 265
15.5 不同排序算法比较 268
15.5.1 稳定性 269
15.5.2 比较次数 269
15.5.3 空间复杂度 270
本章习题 270
第16章 查找 272
16.1 基本概念 272
16.2 折半查找 273
16.3 键树 275
16.3.1 键树的定义与Trie树 275
16.3.2 键树两种实现的对比 279
16.4 后缀树与后缀数组 279
16.4.1 后缀树 279
16.4.2 后缀数组 281
16.5 哈希表 283
16.5.1 哈希表的基本概念 283
16.5.2 哈希函数 283
16.6 一致性哈希 285
16.6.1 普通集群 285
16.6.2 hash集群 286
16.6.3 一致性哈希 286
16.7 海量数据处理 289
16.7.1 分治——Hash映射 289
16.7.2 Bit-map 290
16.7.3 Bloom Filter 292
16.7.4 倒排索引法 293
本章习题 293
第2篇计算机网络基础 298
第1章 计算机网络模型 298
1.1 OSI参考模型 298
1.2 TCP/IP模型 299
本章习题 299
第2章 传输层与SOCKET基本操作简介 301
2.1 传输层 301
2.2 TCP连接的建立和终止 302
2.2.1 三次握手建立连接详解 303
2.2.2 四次挥手释放连接详解 303
2.3 TCP状态转换图 304
2.4 SOCKET的基本操作 307
本章习题 310
第3章 网络层 312
3.1 IPv4地址及网络地址转换NAT 312
3.2 子网划分与子网掩码、CIDR 313
3.3 ARP、RARP、ICMP 314
3.4 IPv6 315
本章习题 315
第4章 网络常用测试工具 318
4.1 ping 318
4.2 tracert 318
4.3 telnet 318
4.4 netstat 319
第3篇操作系统基础 322
第1章 进程管理 322
1.1 进程 322
1.2 线程 324
1.3 进程通信与进程同步 326
1.4 调度算法 327
1.5 死锁 328
第2章 内存管理 330
2.1 逻辑地址空间与物理地址空间 330
2.2 内存分配管理方式 330
2.2.1 基本分页存储管理方式 330
2.2.2 基本分段存储管理方式 331
2.2.3 段页式管理方式 332
2.3 虚拟内存管理 332
2.3.1 虚拟存储器的定义和特征 332
2.3.2 请求分页管理方式 333
第3章 Linux常用命令 337
3.1 目录和文件的相关操作 337
3.2 文本文件内容查看 338
3.3 查看系统信息 340
本章习题 340
第4篇其他计算机相关基础 344
第1章 数据库基础知识 344
1.1 数据库理论 344
1.1.1 数据模型 344
1.1.2 主键与外键 344
1.1.3 事务 345
1.1.4 索引 345
1.1.5 视图 346
1.2 SQL语句 347
1.2.1 数据定义 347
1.2.2 数据查询 348
1.2.3 数据操纵 350
本章习题 351
第2章 设计模式 354
2.1 单例模式 354
2.1.1 单例模式的C++版本实现 354
2.1.2 Java版本实现 355
本章习题 357
第3章 数学基础 358
3.1 进制及其应用 358
3.2 概率 360
3.3 排列与组合 362
3.4 计算题 364
3.4.1 容斥原理 364
3.4.2 其他 365
第4章 逻辑知识 369
第5章 综合知识 372
5.1 Cache 372
5.2 STL 373
5.2.1 顺序容器 373
5.2.2 关联容器 375
5.2.3 容器的选用 375
5.2.4 auto_ptr与shared_ptr 376
综合习题 378
5.3 其他 380
参考文献 384