第一部分 程序设计基础 3
第1章 C++入门 3
1.1 全国信息学奥林匹克竞赛的环境 3
1.2 C++语句 5
1.3 C++词法与语法 15
1.4 C++基本数据类型 18
1.5 常量与字符常量 21
1.6 变量与字符变量 22
1.7 类型转换 26
1.8 运算符 29
1.9 算术表达式 38
1.10 赋值表达式 40
1.11 复合赋值运算 41
1.12 C++有3种语句 41
1.13 语句的构成 42
1.14 switch语句 43
1.15 while循环 44
1.16 do while语句 46
1.17 嵌套循环语句 47
1.18 跳转语句 49
1.19 C++常用内置函数 54
第1章练习题 60
第2章 批量数据处理 数组 74
2.1 一维数组 74
2.2 二维数组 77
2.3 字符数组 79
2.4 字符串的输出 80
2.4 数组应用实例 81
第2章练习题 93
第3章 过程封装 函数 99
3.1 函数的引入 99
3.2 函数的概念 100
3.3 函数的定义 100
3.4 函数的参数、调用格式和返回值 101
3.5 主函数和子函数 103
3.6 函数的应用实例 105
3.7 函数的调用方式 113
3.8 函数的参数传递 121
3.9 变量的作用域与存储类别 124
第3章练习题 131
第4章 递推 133
第4章练习题 138
第5章 字符串与string类 141
5.1 字符串处理函数 141
5.2 字符串处理——string类 148
5.3 string类的应用 158
第5章练习题 196
第6章 STL(标准模板库)在程序设计竞赛中的应用 206
6.1 STL中的基本的概念 206
6.2 STL——模板与操作符重载 209
6.3 string基本字符系列容器 217
6.4 stack(栈)、queue(队列)和priority_queue(优先队列) 228
6.5 迭代器 232
6.6 STL中的算法(共70个) 240
6.7 STL算法库的应用 245
第6章练习题 275
第7章 基础动态规划 281
第7章练习题 291
第二部分 数据结构 301
第1章 栈 301
1.1 栈的特点 301
1.2 栈的相关概念 301
1.3 栈的操作 302
1.4 栈的存储结构 302
第1章练习题 319
第2章 队列 322
2.1 队列的特点 322
2.2 队列的相关概念 322
2.3 队列的操作 323
2.4 队列的存储结构 323
2.5 基于数组的循环队列实现 323
第2章练习题 336
第3章 二叉树 337
3.1 二叉树的定义 337
3.2 二叉树的性质 337
3.3 满二叉树 339
3.4 完全二叉树 339
3.5 二叉树的遍历 340
3.6 二叉树的遍历算法及实现 346
3.7 二叉树的深度优先遍历和广度优先遍历 352
3.8 二叉树的深入研究 356
3.9 二叉树实例 361
第3章练习题 371
第4章 树型动态规划 375
第4章练习题 387
第5章 图的概念和存储结构 393
5.1 图的概念 393
5.2 图的表示方法 395
5.3 图的存储方法 396
5.4 图的邻接表表示法 397
5.5 图的邻接多重表表示法 399
5.6 图的十字链表表示法 399
5.7 图的遍历 399
第5章练习题 409
第6章 堆栈 415
第7章 最短路径 432
第7章练习题 449
第8章 最小生成树 452
8.1 Prim(普里姆)算法 452
8.2 Kruskal(克鲁斯卡尔) 454
第8章练习题 461
第9章 拓扑排序 465
第9章练习题 471
第三部分 搜索剪枝与优化 477
第1章 广度/宽度优先搜索(BFS) 477
第1章练习题 495
第2章 深度优先搜索(DFS) 499
第2章练习题 511
第3章 贪心算法 514
第3章练习题 521
第4章 暴力搜索 524
第4章练习题 536