摘要: 广度优先,则是用的队列,将每一层的节点先存入队列中去,后依次取出队列中的节点,显示与当前节点存在边,但是未被访问过的节点,也就是下一层与之相联系的节点,再将这些节点存入队列。经过层层迭代,就可以完全遍历 整个图。 源码: 测试程序: 测试结果: 阅读全文
posted @ 2018-07-01 14:36 Ranter 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 这里用深度优先遍历存在矩阵里面的图。 深度优先利用的是栈的FIFO特性。为此遍历到底后,可以找到最相邻的节点继续遍历。实现深度优先,还需要在节点加上一个访问标识,来确定该节点是否已经被访问过了。 源码: 测试程序: 测试结果: 阅读全文
posted @ 2018-07-01 14:30 Ranter 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 邻接矩阵实现图,是用一个矩阵,把矩阵下标作为一个顶点,如果顶点与顶点之间有边。那么在矩阵对应的点上把值设为 1 。(默认是0) 测试程序: 测试结果: 阅读全文
posted @ 2018-07-01 14:20 Ranter 阅读(1805) 评论(0) 推荐(0) 编辑
摘要: 邻接表实现图,实际上是在一个数组里面存放链表,链表存放的是连接当前节点的其他节点。 测试程序: 测试结果: 阅读全文
posted @ 2018-07-01 14:14 Ranter 阅读(3150) 评论(0) 推荐(1) 编辑
摘要: 堆分为大顶堆,和小顶堆。 什么是堆? 堆可以看成是一棵二叉树,二叉树的元素是一个数组不断的从左到右轮训放置。如果是大顶堆,则大的数放上面一层,小的数放下面一层。上一层的数,一定大于下一层的数。小顶堆则相反。 那么,如何实现一个大顶堆?这里我用一个链表来实现。 实现堆很简单,只要牢记他的原理就行了。 阅读全文
posted @ 2018-07-01 13:59 Ranter 阅读(592) 评论(0) 推荐(0) 编辑
摘要: 红黑树是一种自动平衡的二叉查找树,因为存在红黑规则,所以有效的防止了二叉树退化成了链表,且查找和删除的速度都很快,时间复杂度为log(n)。 什么是红黑规则? 1.根节点必须是黑色的。 2.节点颜色要么是红要么是黑。 3.树的每一个分叉存在相同黑色节点。 4.不允许存在两个连续的红色节点。 为不断适 阅读全文
posted @ 2018-07-01 13:44 Ranter 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 二叉查找树(BST : BInary Search Tree) 二叉查找树的性质: 1.每一个元素有一个键值 2.左子树的键值都小于根节点的键值 3.右子树的键值都大于根节点的键值 4.左右子树都是二叉查找树 二叉查找树查找一个数据的速度非常快,在庞大的数据中,左右来回较少的次数就能找到。下面来做一 阅读全文
posted @ 2018-06-26 16:53 Ranter 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 二叉树是我们在程序中用的最多的一种树(个人观点)。最简单的一个二叉树是由一个根节点,两个子节点(一左一右成左右孩子节点)组成。二叉树是数组和链表的结合,即包含了数组的快速查找优点,又包含了链表的快速添加删除的优点。熟练掌握二叉树的遍历方法是很有必要的。下面来介绍一下基于二叉树的四种遍历方式。 下面我 阅读全文
posted @ 2018-06-26 16:32 Ranter 阅读(273) 评论(0) 推荐(0) 编辑
摘要: 基数排序: 基数排序分为两种:第一种是LSD ,从最低位开始排序, 第二种是 MSD 从最高位开始排。这里介绍第一种LSD排序算法。 首先,我们先了解什么是基数。基数是根据具体的排序情况而定的,比如我们常见的基数是十进制-10,还有二进制-2。 其次,要熟记基数排序的思想:通过对每一个位上的值相排序 阅读全文
posted @ 2018-06-19 12:03 Ranter 阅读(1282) 评论(0) 推荐(0) 编辑
摘要: 递归的概念很简单,就是自己调用自己。 而迭代,则是通过修改初始化数据,得到中间结果,然后不断的对中间结果进行修改,而得到最终结果。简单来说迭代就是循环。 在此,我们用一个比较经典的Fibonacci数列来说明递归与迭代的区别。 先介绍一下Fibonacci数列: 无穷数列 1,1,2,3,5,8,1 阅读全文
posted @ 2018-05-02 23:38 Ranter 阅读(540) 评论(0) 推荐(0) 编辑