此篇文章是对自己学习这门课程的一个总结和课后的一些练习,做一个汇总,希望对大家有帮助。本人是半路程序员,2018年2月开始学习C++的,下面的代码基本都是C++11版本的,代码有错误的地方请不吝留言赐教。附有部分练习LeetCode、POJ的题目。updated on 2019.9.3
1.链表 Linked List
1.1 单链表
1.2 练习
- 判断字符串是否为回文串
- 约瑟夫环问题
- LRU缓存策略
- 单链表的归并排序
- 单链表中环的检测
- POJ 1250 计算流失的顾客数
- LeetCode 206. 反转链表
2.栈 Stack
2.1 顺序栈、链式栈
2.2 共享顺序栈
2.3 练习
- POJ 1028 浏览器前进后退
- POJ 1363 火车厢排队
- LeetCode 557. 反转字符串中的单词 III(栈)
3.队列 Queue
3.1 链式队列、顺序队列
3.2 循环顺序队列
3.3 练习
- 打印杨辉三角
- POJ 2259 团队排队问题
- POJ 1581 优先队列 priority_queue 比赛胜者求解
- POJ 3481 double queue
4.递归 Recursion
4.1 走台阶问题
4.2 汉诺塔问题
4.3 练习
- POJ 1664 苹果放盘子
5.排序 Sorting
5.1 十种基本的排序算法
5.2 快速排序的优化1— 快速排序细节优化2
5.3 练习
- POJ 1007 DNA排序
- POJ 1804 求解逆序数
- 寻找数组内第K大的元素
- 大小写字母数字分离
6.二分查找 Binary Search
6.1 查找给定条件的值
6.2 练习
- 求平方根
- POJ 3122 怎么吃更多的披萨
- POJ 1064 分割线缆
- POJ 2785 求4数之和为0的方案数
- LeetCode 35. 搜索插入位置(二分查找)
7. 跳表 Skip List
7.1 跳表数据结构和实现
8. 散列表 Hash Table(哈希表)
8.1 散列表结构和实现(线性探测法&拉链法)
8.2 Hash算法及其应用场所
8.3 练习
- POJ 1200 计算子串种类
- POJ 2785 求4数之和为0的方案数(哈希法)
- LeetCode 771. 宝石与石头(哈希)
- LeetCode 535. TinyURL 的加密与解密(哈希)
9. 二叉树 Binary Tree
9.1 二叉树及其遍历
9.2 二叉查找树
9.3 红黑树
9.4 堆
9.5 线段树(Segment Tree)
9.6 树状数组
9.7 并查集(Disjoint-Set)
9.x 练习
- POJ 1577 给定叶子节点求二叉查找树
- POJ 2255 Tree Recovery(已知前序&中序,求后序)
- LeetCode 1008. 先序遍历构造二叉树(已知先序,求二叉搜索树)
- POJ 2388 Who’s in the Middle(求中位数)
- POJ 1442 Black Box(大小堆,求第K小的元素)
- LeetCode 230. 二叉搜索树中第K小的元素(中序遍历)
- LeetCode 173. 二叉搜索树迭代器(中序遍历)
- LeetCode 144. 二叉树的前序遍历(前序遍历)
- LeetCode 94. 二叉树的中序遍历(中序遍历)
- LeetCode 145. 二叉树的后序遍历(后序遍历&总结)
- LeetCode 671. 二叉树中第二小的节点
- LeetCode 257. 二叉树的所有路径(DFS)
- LeetCode 617. 合并二叉树
10. 图 Graph
10.1 图的存储及其BFS/DFS搜索
10.2 最小生成树
10.3 拓扑排序
10.4 最短路径算法 Shortest Path
10.x 练习
- 寻找社交网络n度好友
- 农夫过河问题
11. 字符串匹配 string matching
11.1 BF & RK算法
11.2 BM算法
11.3 KMP算法
11.4 Trie树算法
11.5 AC自动机算法
11.x 练习
- POJ 1936 字符匹配(暴力匹配)
- POJ 3690 找星座(二维匹配)
- POJ 3461 字符串匹配
12. 贪心算法 Greedy Algorithm
12.1 找零钱、区间覆盖、霍夫曼编码
12.x 练习
- POJ 2453 二进制数字问题
- POJ 2287 田忌赛马问题
- 汽车加油次数问题
13. 分治算法 Divide & Conquer
13.1 分治算法介绍
13.x 练习
- POJ 1804 归并求逆序数
- 最近点对问题 & POJ 3714
- 万里挑一 找假硬币
14. 回溯算法 Backtracking
14.1 简介 & 八皇后问题
14.2 回溯应用-- 0-1背包问题
14.x 练习
- POJ 1753 Flip Game
- POJ 1321 棋盘问题
- POJ 2965 开冰箱的门
- LeetCode 17. 电话号码的字母组合(回溯)
- LeetCode 113. 路径总和 II(回溯)
15. 动态规划算法 Dynamic Programming
15.1 0-1背包问题(DP解法)
15.2 动态规划理论学习
15.3 搜索引擎拼写纠错
15.x 练习
- 双11购物凑单
- “杨辉三角”最短路径
- 动态规划应用–找零钱
- POJ 1276 ATM凑钱(动态规划)
- 动态规划应用–最长递增子序列
- LeetCode 53. 最大子序和(动态规划)
- LeetCode 70. 爬楼梯