
数据结构
文章平均质量分 92
LackWood
这个作者很懒,什么都没留下…
展开
-
平衡二叉树的创建、插入、删除
二叉排序树的插入操作将是我们构建平衡二叉树的基本操作,也很简单,直接放代码,不懂的话,可以去翻一下数据结构教材的查找这一章。(代码中的注释都是自己写的,而且修改代码的过程中可能并没有同步修改注释,所以读者觉得有的注释看起来不是很对,这是正常的)这也就意味着,每次插入一个节点,最多只可能差生一棵不平衡的子树。这个就很容易了,数据结构教材中有专门的介绍,但是我在实现上做了略微的改动,因为我的二叉树节点中只有指向两个孩子结点的指针,无法通过MinTree结点找到其父节点,因此我是在逻辑上实现对应的操作。原创 2023-03-09 20:42:36 · 393 阅读 · 0 评论 -
Floyd算法求解各顶点之间最短路径问题
Floyd算法基于动态规划思想,通过一个二维数组记录从一个节点到另一个节点的最短路径长度。算法的核心思想是逐渐增加中间节点,如果在加入一个中间节点后能够获得更短的路径,则更新路径长度。Floyd算法,也称为Floyd-Warshall算法,是一种用于求解图中所有节点之间最短路径的算法。如图:这是一个有三个顶点的有向图,矩阵A存储了两点之间的最短距离,在初始状态下就是一个邻接矩阵;矩阵pre记录了两点之间的最短路径中,加入的中转顶点。的最短路径长度是10,从pre可以知道,从。这个路径路径中,加入了。原创 2023-03-07 23:09:55 · 6214 阅读 · 0 评论 -
求解单源最短路径问题
而且和树的层序遍历不同的是,图中的每一个顶点可能和图中其他任意顶点邻接,所以在遍历的过程中,我们就要防止已经访问过的顶点,再次以其他顶点的邻接顶点的身份被访问。所在的连通分量中的全部顶点,至于图中其余未被访问的顶点,只能从中重新选择一个起始顶点,重复之前的操作,直至所有的顶点都被访问。需要注意的是,在访问的过程中,我们需要一个辅助队列,每访问一个顶点,我们都需要将对应顶点的未被访问过的邻接顶点入队。代码中的path数组,是用来记录每一个顶点的前驱顶点,例如:path[w] = u。未被访问过的邻接顶点。原创 2023-03-07 20:24:02 · 451 阅读 · 0 评论 -
KMP算法(next数组求法)
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)。原创 2023-02-27 19:25:54 · 14177 阅读 · 4 评论