数据结构应用大全

116 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

这篇博客是一篇综合类的,主要是汇集各种数据结构的应用,也是补上之前偷懒没写的,就总结成一篇了

括号匹配

[ ( [ ] [ ] ) ] 是否匹配成功

栈中的情况:[  (  [  ] 	第四个匹配成功,弹出匹配成功的项
栈中的情况:[  (  [  ]	第六个匹配成功
栈中的情况:[  (  )		第七个匹配成功
栈中的情况:[  ] 		第八个匹配成功
该括号串匹配成功

前/中/后缀表达式

  1. 中缀表达式 => 后缀表达式
(a+b)/c*d-(e-f/g)+h/i  
// () > /* > +-
ab+c/d*efg/--hi/+
  1. 后缀表达式如何计算?
ab+c/d*efg/--hi/+
// 遇到符号就拿前面两个来运算
ab+ 	=> 	a+b
c/ 		=> 	(a+b)/c
d*		=> 	(a+b)/c*d
efg/ 	=> 	f/g
- 		=> 	e-f/g
-		=> 	(a+b)/c*d-(e-f/g)
hi/		=> 	h/i
+ 		=> 	(a+b)/c*d-(e-f/g)+h/i

递归

链接: pan.baidu.com/s/1UVyo93OV… 提取码: n5jv 时间紧迫,递归最好还是有动画比较好懂

队列

双端队列

数据结构之队列 这个可以看之前的一篇博客,很简单

KMP算法

朴素匹配就不用多说,直接暴力即可 KMP算法主要考的是==求next数组== 在这里插入图片描述 在这里插入图片描述 判断next值就是判断模式串该从哪里开始匹配的问题,这里化了一条线,最终会在线右边第一个开始匹配 比如next3,经过向右移动,最终j=1,说明此时需要从1开始匹配,即next3=1; 又如next4,经过向右移动,再第三行这里匹配成功,此时j=2 在这里插入图片描述

KMP算法的优化

KMP优化算法主要考的是==求nextval数组==

以上个例子为基础,我们已经得到了未优化的next数组,如下 011234223456,此时我们只需要对其进行手动判断,如下

			a b a b a a a b a b a a
			0 1 1 2 3 4 2 2 3 4 5 6
// 1(a,0)表示第1个位置,内容为a,next数组值为0
第一个:		无需改变
第二个:		对应的是b,失败时跳转回1(a,0),因此不需要改变
第三个:		对应的是a,失败时跳转回1(a,0),因此改为1(a,0)对应的0	// 此时a匹配未成功,回到1(a,0)匹配也必定不成功 
			a b a 
			0 1 0
第四个:		对应的是b,失败时跳转回2(b,1),因此改为2(b,1)对应的1 // 此时b匹配未成功,回到2(b,1)匹配也必定不成功
			a b a b
			0 1 0 1
	...
最终结果为	a b a b a a a b a b a a
			0 1 0 1 0 4 2 1 0 1 0 4

二叉树⭐

二叉树的三种遍历及层次遍历

至少要能够手动的分析出树的结构 (1)先序遍历:根左右;(2)中序遍历:左根右;(3)后序遍历:左右根;(4)层次遍历:第一层、第二层...

例如:

  1. 前序遍历为DABEC,中序遍历为DEBAC,求后序遍历 ==CEDBA==
  2. 前序遍历为ABCDEF,中序遍历为CBAEDF,求后序遍历 ==CBEFDA==

线索二叉树

增加了手绘方式的图解

树、森林与二叉树的转换

看这里,我觉得我画的还行

哈夫曼树

因为前不久才写了最佳归并,不想写一遍哈夫曼了

并查集

并查集使用的是==双亲==定义方法(代码要记住) 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

图⭐

最小生成树(Prim、Kruskkal)

  1. Prim算法 时间复杂度O(|V|^2^),不依赖于|E|,适用于边稠密的图 原理:每次都找跟已搜索结点毗邻的最短边 在这里插入图片描述

  2. Kruskkal算法 时间复杂度O(|E|log|E|),适用于边稀疏而顶点较多的图 原理:每次都找最短的一条边 在这里插入图片描述

最短路径(Dijkstra、Floyd)

  1. Dijkstra算法求单源最短路径问题 时间复杂度O(|V|^2^),基于贪心策略,不适用于带有负权值的边在这里插入图片描述

  2. Floyd算法 时间复杂度O(|V|^3^),基于动态规划策略 允许图中带有负权值的边,但不允许有包含带负权值的边组成的回路 在这里插入图片描述

有向无环图(DAG图)

在这里插入图片描述

链接: pan.baidu.com/s/1TSrAY3jO… 提取码: aph2 咸鱼学长无敌!!!

拓扑排序,AOV网

==注:一定不能有环路== 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

关键路径

  • 从源点(开始顶点)到汇点(结束顶点)的所有路径中,具有最大路径长度的路径称为关键路径

  • 关键路径不一定唯一,因此缩短某一条关键路径的某一个活动时间不一定可以缩短时间,要缩短所有关键路径的交集边才可以

查找

二叉排序树

平衡二叉树

红黑树

B树和B+树

散列表(等更~~)

排序

外部排序的应用(败者树、置换-选择排序、最佳归并树)