第1章 实验环境介绍 1
1.1 实验工具的选择 1
1.2 安装配置Visual Studio 1
1.3 新建C++项目 2
1.4 符合Linux/G++/Online Judge规范的VC++项目 2
1.5 Visual Studio主界面 4
第2章 调试程序的技巧 5
2.1 实验教学中出现的一些现象 5
2.2 程序错误的分类 6
2.2.1 语法错/编译错Compile Error 6
2.2.2 语义错Semantic Error 7
2.2.3 链接错Link Error 7
2.2.4 运行错Runtime Error 8
2.2.5 算法错Logical Error 9
2.2.6 不要深究的错 9
2.3 调试前先把程序写好看 9
2.3.1 变量和函数命名基本原则 10
2.3.2 函数划分原则 10
2.3.3 代码缩进是必须遵守的底限 10
2.4 调试错误的原则 11
2.5 静态分析法 11
2.6 内置输入数据法 12
2.7 粘贴输入数据法 13
2.8 断点的设置 13
2.8.1 断点的作用 13
2.8.2 断点的设置方法 14
2.8.3 触发断点以后 14
2.8.4 让程序继续 15
2.8.5 复杂情况下的断点设置方法 15
2.9 单步跟踪调试 15
2.9.1 单步跟踪的概念 15
2.9.2 启用单步跟踪的位置和快捷键 16
2.9.3 step into与step over 16
2.10 常用调试窗口的使用 16
2.10.1 局部变量观察窗口 16
2.10.2 表达式观察窗口 17
2.10.3 调用堆栈观察窗口 18
2.11 一个综合调试示例 18
2.11.1 找到第一个BUG 19
2.11.2 找到第二个BUG 20
第3章 实验程序的统一要求 22
3.1 将实验程序分层 22
3.1.1 数据结构层 22
3.1.2 算法应用层 23
3.1.3 驱动测试层 23
3.2 简化交互功能 23
3.3 内置测试数据,不要编写键盘输入功能 23
3.4 使用模板函数和模板类 24
3.4.1 模板函数 24
3.4.2 模板类 25
3.4.3 小测验 25
第4章 线性表的封装与应用 27
4.1 顺序表的封装实验 27
4.2 单链表的封装实验 31
4.3 链表的应用:多项式的存储与运算 36
第5章 栈的封装与应用 40
5.1 栈的封装 40
5.2 栈的应用—表达式求值 43
5.3 栈的应用—回溯法求解地图着色 46
第6章 队列的封装与应用 50
6.1 队列的封装 50
6.2 队列的应用—迷宫寻路 54
第7章 串的封装与模式匹配 58
7.1 串的封装 58
7.2 串的快速匹配—KMP算法 63
7.3 串的快速匹配—Sunday算法 66
第8章 矩阵的封装与应用 69
8.1 稠密矩阵的封装 69
8.2 稀疏矩阵的封装及其快速转置 75
第9章 树的存储与应用 80
9.1 二叉树的封装与遍历 80
9.2 Huffman编解码 86
第10章 图的存储与应用 92
10.1 图的邻接链表封装 92
10.2 图的遍历 96
10.3 图的最小生成树 98
10.4 图的拓扑排序 100
10.5 关键路径 102
10.6 单源最短路径和所有点对最短路径 104
第11章 查找算法 108
11.1 折半查找 108
11.2 二叉排序树和AVL平衡二叉树 110
11.3 Hash表 114
第12章 排序算法 118
12.1 插入排序与希尔排序 118
12.2 选择排序与堆排序 120
12.3 快速排序与合并排序 123
12.4 线性时间排序 126
第13章 经典算法实验 128
13.1 分治与递归生成全排列实验 128
13.2 动态规划算法求最长公共子序列 131
13.3 回溯法求解n皇后问题 133
第14章 课程设计任务 135
14.1 地理信息管理系统 135
14.2 关系型数据库管理系统 137
14.3 词频统计 138
14.4 以不完整拼音搜索通讯录 139
14.5 排名估计 140
14.6 内存资源管理器设计 141
14.7 任务调度器 142
14.8 搜索引擎优化 143
14.9 云存储系统 144
14.10 支持k近邻机器学习算法的高效数据结构 145
14.11 多层级组织信息存储结构 146
参考文献 147