没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
手写代码必备手册
戴方勤 (soulmachine@gmail.com)
最后更新 2013-4-16
版权声明
本作品采用“Creative Commons 署名 -非商业性使用 -相同方式共享 3.0 Unported 许可协议
(cc by-nc-sa)”进行许可。http://creativecommons.org/licenses/by-nc-sa/3.0/
内容简介
这个手册包含了一些经典题目的范例代码,经过仔细编写,编码规范良好,适合在纸
上默写。
一个人,成为一个好的作家之前,他需要背诵大量经典段落,写下很多练习的模仿作
品。类似的,成为一个好的程序员之前,也需要些大量的练习代码,反复模仿经典的代码。
这本手册的定位,比 ACM 模板库的代码少,题型比 ACM 简单,对代码有一些讲解。
ACM 代码库功能全,很多难度很高,且整本手册都是代码,没有讲解。本手册中的每一
个题目,都至少在两本纸质书中出现过。
全书的代码,使用纯 C + STL 的风格。本书中的代码规范,跟在公司中的工程规范略
有不同,为了使代码短(方便迅速实现):
• 所有代码都是单一文件。这是因为一般 OJ 网站,提交代码的时候只有一个文本框,
如果还是按照标准做法,比如分为头文件.h 和源代码.cpp,无法在网站上提交;
• 喜欢在全局定义一个最大整数,例如 MAX。一般的 OJ 题目,都会有数据规模的限
制,所以定义一个常量 MAX 表示这个规模,可以不用动态分配内存,让代码实现更
简单;
• 经常使用全局变量。比如用几个全局变量,定义某个递归函数需要的数据,减少递
归函数的参数个数,就减少了递归时栈内存的消耗,可以说这几个全局变量是这个
递归函数的“环境”。
本手册假定读者已经学过《数据结构》
¬
,《算法》
这两门课,熟练掌握 C++ 或
Java。
本手册是开源的,项目地址:https://github.com/soulmachine/acm-cheatsheet
¬
《数据结构》,严蔚敏等著,清华大学出版社,http://book.douban.com/subject/2024655/
《Algorithms》,Robert Sedgewick, Addison-Wesley Professional, http://book.douban.com/subject/4854123/
i
ii
更新记录
2013-04-14 v0.1
手写代码必备手册 https://github.com/soulmachine/acm-cheatsheet
目录
第 1 章 线性表 1
第 2 章 栈和队列 2
2.1 栈 . . . . . . . . . . . . . . . . . 2
2.1.1 Hanoi 塔问题 . . . . . . 2
2.1.2 数制转换 . . . . . . . . 3
2.2 队列 . . . . . . . . . . . . . . . 4
2.2.1 打印杨辉三角 . . . . . 4
第 3 章 树 6
3.1 二叉树的遍历 . . . . . . . . . . 6
3.2 重建二叉树 . . . . . . . . . . . 9
第 4 章 图 11
4.1 深度优先搜索 . . . . . . . . . . 11
4.1.1 黑白图像 . . . . . . . . 12
4.1.2 欧拉回路 . . . . . . . . 14
4.2 广度优先搜索 . . . . . . . . . . 17
4.2.1 走迷宫 . . . . . . . . . . 18
4.2.2 八数码问题 . . . . . . . 21
4.3 双向 BFS . . . . . . . . . . . . . 22
4.3.1 八数码问题 . . . . . . . 22
4.4 最小生成树 . . . . . . . . . . . 22
4.4.1 Prim 算法 . . . . . . . . 22
4.4.2 Kruskal 算法 . . . . . . 22
4.5 最短路径 . . . . . . . . . . . . . 22
4.5.1 单 源 最 短 路径 (Dijk-
stra 算法) . . . . . . . . 22
4.5.2 每点最短路径 (Floyd
算法) . . . . . . . . . . . 22
4.6 拓扑排序 . . . . . . . . . . . . . 22
4.7 关键路径 . . . . . . . . . . . . . 22
4.8 A* 算法 . . . . . . . . . . . . . . 22
4.8.1 八数码问题 . . . . . . . 22
第 5 章 查找 30
5.1 折半查找 . . . . . . . . . . . . . 30
第 6 章 排序 31
6.1 快速排序 . . . . . . . . . . . . . 31
第 7 章 暴力枚举法 33
7.1 算法思想 . . . . . . . . . . . . . 33
7.2 简单枚举 . . . . . . . . . . . . . 33
7.2.1 分数拆分 . . . . . . . . 33
7.3 枚举排列 . . . . . . . . . . . . . 34
7.3.1 生成 1 n 的排列 . . . . 34
7.3.2 生成可重复集合的排列 34
7.3.3 下一个排列 . . . . . . . 34
7.4 子集生成 . . . . . . . . . . . . . 34
7.4.1 增量构造法 . . . . . . . 34
7.4.2 位向量法 . . . . . . . . 34
7.4.3 二进制法 . . . . . . . . 34
第 8 章 回溯法 35
8.1 算法思想 . . . . . . . . . . . . . 35
8.2 八皇后问题 . . . . . . . . . . . 35
iii
iv 目录
手写代码必备手册 https://github.com/soulmachine/acm-cheatsheet
第 1 章
线性表
线性表 (Linear List) 包含以下几种:
• 顺序存储:数组
• 链式存储:单链表,双向链表,循环单链表,循环双向链表
• 二者结合:静态链表
1
剩余41页未读,继续阅读
资源评论
catkinm
- 粉丝: 1
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功