一、稀疏数组和队列
1.1稀疏数组
1.2队列
二、链表
2.1单向链表
2.2双向链表
2.3单向环形链表
三、栈
3.1栈的快速入门
3.2中缀表达式转后缀表达式
3.3逆波兰计算器
四、递归
4.1递归调用机制
4.2迷宫问题
4.3八皇后问题
五、排序算法
5.1时间复杂度
5.2冒泡排序
5.3快速排序
5.4选择排序
5.5插入排序
5.6希尔排序
5.7归并排序
5.8基数排序
六、查找算法
6.1线性查找算法
6.2二分查找算法
6.3插值查找算法
6.4黄金分割查找算法
七、哈希表
八、树结构
8.1二叉树
8.2顺序存储二叉树
8.3线索化二叉树
8.4堆排序
8.5赫夫曼树
8.6赫夫曼编码
8.7二叉排序树
8.8平衡二叉树
8.9二叉树与B树
9.0 2-3树
9.1 B树、B+树和B*树
九、图
9.1图基本介绍
9.2图的表示方式
9.3图的快速入门
9.4图的深度优先遍历
9.5图的广度优先遍历
9.6图的深度优先VS广度优先
dfs:
1.先把结点A,B,C,D,E依次存入集合list
2.遍历list:
1)首先遇到A,访问输出A并标记A已访问,寻找A的第一个邻接结点B的下标,发现B没有被访问过,递归回到1)访问输出B并标记B已访问,寻找B的第一个邻接结点A的下标,发现A已被访问过,寻找B的下一个邻接结点C的下标,发现C没有被访问过,递归回到1)访问输出C并标记C已访问,寻找C的第一个邻接结点A的下标,发现A已被访问过,寻找C的第二个邻接结点B的下标,发现B已被访问过,接着寻找会发现没有找到,退出递归。
2)遇到B,发现B已被访问过,不用从B开始遍历。
3)遇到C,发现C已被访问过,不用从C开始遍历。
4)遇到D,发现D还没被访问过,从D开始遍历,访问输出D并标记D已访问,寻找D第一个邻接结点B的下标,发现B已被访问过,接着寻找D的下一个邻接结点的下标,会发现没有找到,退出递归。
5)遇到E,发现E还没被访问过,从E开始遍历,访问输出E并标记E已访问,寻找E的第一个邻接结点B的下标,发现B已被访问过,接着寻找E的下一个邻接结点的下标,会发现没有找到,退出递归。
6)遍历结束,访问输出结果是:A,B,C,D,E
bfs
1.先把结点A,B,C,D,E依次存入集合list
2.遍历list:
1)首先遇到A,访问输出A并标记A已访问及将A加入队尾,(1)此时队列非空,将队首元素A弹出,寻到A的第一个邻接结点B的下标,发现B没有被访问过,访问输出B并标记已访问及将B加入队尾,接着寻找A的第二个邻接结点C的下标,发现C没有被访问过,访问输出C并标记已访问及将C加入队尾,再接着寻找A的下一个邻接结点的下标,发现没有找到,退出循环。(2)此时队列非空,弹出队首元素B,重复(1)
(3)此时队列非空,弹出队首元素C,重复(1)
(4)此时队列非空,弹出队首元素D,重复(1)
(5)此时队列非空,弹出队首元素E,重复(1)
2)遇到B,发现B已被访问过,不用从B开始遍历。
3)遇到C,发现C已被访问过,不用从C开始遍历。
4)遇到D,发现D已被访问过,不用从D开始遍历。
5)遇到E,发现E已被访问过,不用从E开始遍历。
6)遍历结束 访问输出结果是:A,B,C,D,E
十、程序员常用10种算法
10.1二分查找算法(非递归)
10.2分治算法
10.3动态规划算法
10.4KMP算法
10.5贪心算法
10.6普里姆算法
10.7克鲁斯卡尔算法
10.8迪杰斯特拉算法
10.9弗洛伊德算法
10.10马踏棋盘算法