
数据结构
游九河
每日需更进一步
展开
-
数据结构 -- 图的广度优先遍历解决最短路径
最短路径用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。广度优先遍历算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。scala 实现下面的代码:1 创建一个队列,遍历的起始点放入队列,新建一个 boolean 数组、新建距离数组,父亲顶点数组2 从队列中取出一个元素,收集它,将其标记为已访问,将父亲顶点和距离存到数...原创 2019-10-17 21:12:14 · 2226 阅读 · 0 评论 -
数据结构 -- 图的广度优先遍历(BFS)
图的广度优先遍历(BFS)bfs总是先访问完同一层的结点,然后才继续访问下一层结点,如下图 从0 ->(1、2)-> (3、4、6) -> (5) 一层一层向距离起始点更远的顶点遍历。它最有用的性质是可以遍历一次就生成中心结点到所遍历结点的最短路径,这一点在求无权图的最短路径时非常有用。scala 实现下面的代码:1 创建一个队列,遍历的起始点放入队列2 从队列中...原创 2019-10-17 19:31:30 · 796 阅读 · 0 评论 -
数据结构 -- 图中二分图检测
二分图二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。图1和图3属于二分区,图2不属于二分图。二分图检测染色法如上图,对图中顶点染色,从其中一个顶点开始染为红色,相邻顶点染为黑色,依次...原创 2019-10-16 20:54:15 · 442 阅读 · 0 评论 -
数据结构 -- 图中两点间的路径
无向图中的路径路径:在图中,两点间边构成的序列,比如图中0到6中一条路径0 -> 1 -> 3 -> 2 -> 6。一般图中两点之间的路径不止一条。这里的路径只要找到一条就返回。scala 实现import scala.collection.mutable.ArrayBufferclass Path { private var G: Graph = _ ...原创 2019-10-16 18:50:23 · 1741 阅读 · 0 评论 -
数据结构 -- 无向图 环检测
环的定义在无向图中出现回路,环不包含自环和平行边图中环检测 scala 实现CycleDetection.scalaimport util.control.Breaks.{break, _}class CycleDetection { var G: Graph = _ var visited: Array[Boolean] = _ var hasCycle = fal...原创 2019-10-14 20:59:22 · 887 阅读 · 0 评论 -
数据结构 -- 图的联通分量(scala版)
连通分量无向图G的极大连通子图称为G的连通分量( Connected Component)。任何连通图的连通分量只有一个,即是其自身,非连通的无向图有多个连通分量。如下,图中有两个连通分量。图算法中功能1).获得图中连通分量的个数2).判断两个顶点是否连通3).获取每个连通分量及其中的顶点集合scala实现import scala.collection.mutable.Arra...原创 2019-09-30 17:43:05 · 690 阅读 · 0 评论 -
数据结构 -- 图的深度优先遍历(scala版)
图的深度优先遍历图的深度优先遍历是图算法中基础算法,一些高级的算法都是这个算法的变种深度优先遍历的主要思想:首先以一个未被访问过的顶点作为起始点v,依次从未访问的邻接点出发对图进行遍历,直到图中和v相连的顶点都被访问到,若图中有未被访问的则从一个未被访问的顶点出发重新进行遍历。scala实现图的深度优先遍历import scala.collection.mutable.ArrayBuff...原创 2019-09-29 17:05:02 · 525 阅读 · 0 评论 -
数据结构 -- 图的基本表示:邻接表(scala版)
图图是一种复杂的非线性结构。图G由两个集合V(顶点Vertex)和E(边Edge)组成,定义为G=(V,E)底层存储结构存储结构有两种方式:链表存储:如上图二叉树存储:hash表、红黑树实现,hash表查询效率比红黑树略高,但需要更大的空间scala 实现import java.io.Fileimport java.util.Scannerimport scala.col...原创 2019-09-29 11:56:47 · 403 阅读 · 0 评论 -
数据结构 -- 图的基本表示:邻接矩阵 (scala版)
图图是一种复杂的非线性结构。图G由两个集合V(顶点Vertex)和E(边Edge)组成,定义为G=(V,E)表示图有两种主要用于表示图的方式:邻接表邻接矩阵scala邻接矩阵实现图import java.io.Fileimport java.util.Scannerclass AdjMatrix { var V = 0 // 节点 var E = 0 // 边...原创 2019-09-26 17:14:04 · 336 阅读 · 0 评论 -
数据结构 -- 队列 (scala版)
队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。原创 2019-09-26 14:21:27 · 251 阅读 · 0 评论 -
数据结构 -- 红黑树
2-3 树2-3 树是最简单的 B 树,2-3 树一颗绝对平衡的树,2-3 树满足二分搜索树的基本性质,在2-3 树中有两种节点,一种存放一个元素,另外一种存在两个元素。2-3 树添加元素红黑树红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由Rudolf Bayer发明的,当时被称为平衡...原创 2019-05-22 11:31:30 · 182 阅读 · 0 评论 -
数据结构 -- AVL树
AVL树在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者G. M. Adelson-Velsky和E. M. Landis,他们在1962年的论文《An algorithm for the organization of informa...原创 2019-05-10 15:37:09 · 256 阅读 · 0 评论 -
数据结构 -- 二分搜索树
二分搜索树1.若它的左子树不为空,则左子树上所有结点的值均小于等于根结点的值;2.若它的右子树不为空,则右子树上所有结点的值均大于等于根结点的值;3.它的左右子树均为二分查找树。图片(注:百度搜索而来的图片)链接: link.功能1.获得树中的元素个数2.树是否为空3.添加元素4.是否包含元素e5.树遍历前序遍历中序遍历后序遍历层序遍历6.树的最大深度7.删除元素...原创 2019-04-25 14:59:17 · 155 阅读 · 0 评论 -
数据结构 -- 最大堆
最大堆最大堆是堆的两种形式之一。根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆,又称最大堆(大顶堆)。大根堆要求根节点的关键字既大于或等于左子树的关键字值,又大于或等于右子树的关键字值。最大堆的添加元素和删除元素过程java代码实现import java.util.Random;public class MaxHeap<E extends Compar...原创 2019-04-29 15:07:34 · 397 阅读 · 0 评论 -
数据结构 -- 单向链表
单向链表单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始;链表是使用指针进行构造的列表;又称为结点列表,因为链表是由一个个结点组装起来的;其中每个结点都有指针成员变量指向列表中的下一个结点;列表是由结点构成,head指针指向第一个成为表头结点,而终止于最后一个指向NULL的指针。单向链表的结构图片(注:百度搜索而来的图片)链接: link...原创 2019-04-28 15:15:39 · 196 阅读 · 0 评论 -
数据结构 -- 栈
栈的定义栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)栈的入栈和出栈过程图片(注:百度搜索而来的图片)链接: link.java代码实现// An highlighted blockimport java.util.Random...原创 2019-04-23 17:12:20 · 146 阅读 · 0 评论 -
数据结构 -- 队列
队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列的入队和出队过程图片(注:百度搜索而来的图片)链接: link.java代码实现public class Queue<E> { int size;...原创 2019-04-28 10:21:34 · 120 阅读 · 0 评论