遍历

无向图的遍历(DFS,BFS)

孤街醉人 提交于 2019-12-26 23:00:55
图的遍历(无向图) (DFS深度优先遍历,BFS广度优先遍历)---------连通图和非连通无向图均适用 # include <stdio.h> # include <string.h> # include <stdlib.h> # define MVNum 100 //最大顶点数 # define MaxInt 3000 //表示极大值即无穷 # define ERROR -1 # define OK 1 typedef int VexTexType ; //假设顶点字符的数据类型 为字符型 typedef int ArcType ; //假设边的权值为整型 typedef int OtherInfo ; //和边相关的信息为整型,比如说权值 bool visited [ MVNum ] ; //访问标志数组,其初值为false //--------图的存储结构-------- typedef struct { VexTexType vexs [ MVNum ] ; //顶点表 ArcType arcs [ MVNum ] [ MVNum ] ; //邻接矩阵 int vexnum , arcnum ; //图的当前点数和边数 } AMGraph ; AMGraph G1 ; //用来查找此顶点在G1中vex数组里存放的位置 int LocateVex ( AMGraph &

Python标准模块--Iterators和Generators

可紊 提交于 2019-12-26 18:59:21
1 模块简介 当你开始使用Python编程时,你或许已经使用了iterators(迭代器)和generators(生成器),你当时可能并没有意识到。在本篇博文中,我们将会学习迭代器和生成器是什么。当然,我们也会了解如何创建它们,在我们需要的时候,就可以创建属于我们自己的迭代器和生成器。 2 模块使用 2.1 迭代器 迭代器是一个允许你在一个容器上进行迭代的对象。Python的迭代器主要通过两个方法实现:__iter__和__next__。__iter__要求你的容器支持迭代。它会返回迭代器对象本身。如果你想创建一个迭代器对象,你还需要定义__next__方法,它将会返回容器的下一个元素。 注意: 在Python 2中,命名习惯有所不同,__iter__保持不变,__next__ 改为next。 为了对这些概念更加清晰,让我们回顾下面的两个定义: 可迭代对象(iterable),只定义了__iter__方法; 迭代器(iterator),定义了__iter__和__next__两个方法,__iter__返回迭代器本身,__next__方法返回下一个元素; 所有函数名中有双下划线的方法,都很神奇,你不需要直接调用__iter__或者__next__。你可以使用for循环或者转换为列表,Python就会自动替你调用这些方法。当然你或许还是想调用它们

为什么说要学习全新的原生 JavaScript?

醉酒当歌 提交于 2019-12-26 17:24:52
JavaScript 是前端开发工程师最重要的技能,没有之一。在 Vue.js、React.js、Koa、Echarts 等框架风靡一时的背景下,原生的 JavaScript 就可以被抛弃了吗?答案是否定的。 typeof 10n; 这个正确的直接结果是:bigint。 那么 bigint 是用来解决什么问题的呢?从字面意思就能猜出 big 的含义,我们知道 Number 基本类型可以精确表示的最大整数是 2^53,如果超出了这个范围那就会出错了,所以在 ES10 提出了 bigint 数据类型来解决这个问题。 开场白结束了,我的观点也表达完了:原生能力是框架所不能取代的。 辩证关系 此时此刻,很多同学还处于朦胧中:原生JavaScript不能被框架所取代,那他俩的关系是什么?需要我二选一吗? Javascript框架是指以Javascript语言为基础搭建的编程框架 这是百度百科的定义,换句话说框架本质上还是原生的 JavaScript,如果 JavaScript 不具备的能力,框架也注定无能为力。其次,框架更注重的是效率的提升而非能力。比如 Vue.js 让大家编写组件更容易了让我们写业务的开发效率提升了,但是不能说 Vue.js 让原生 JavaScript 的能力增强了。反过来说原生 JavaScript 能在框架之上做什么?那就是写业务逻辑了或者补充框架能力(插件)

IEnumerable和IEnumerator 详解

十年热恋 提交于 2019-12-26 05:14:28
http://blog.csdn.net/byondocean/article/details/6871881 初学C#的时候,老是被IEnumerable、IEnumerator、ICollection等这样的接口弄的糊里糊涂,我觉得有必要切底的弄清楚IEnumerable和IEnumerator的本质。 下面我们先看IEnumerable和IEnumerator两个接口的语法定义。其实IEnumerable接口是非常的简单,只包含一个抽象的方法GetEnumerator(),它返回一个可用于循环访问集合的IEnumerator对象。IEnumerator对象有什么呢?它是一个真正的集合访问器,没有它,就不能使用foreach语句遍历集合或数组,因为只有IEnumerator对象才能访问集合中的项,假如连集合中的项都访问不了,那么进行集合的循环遍历是不可能的事情了。那么让我们看看IEnumerator接口有定义了什么东西。看下图我们知道IEnumerator接口定义了一个Current属性,MoveNext和Reset两个方法,这是多么的简约。既然IEnumerator对象时一个访问器,那至少应该有一个Current属性,来获取当前集合中的项吧。 MoveNext方法只是将游标的内部位置向前移动(就是移到一下个元素而已),要想进行循环遍历,不向前移动一下怎么行呢? 详细讲解:

查找最长子串的长度(不重复字符)

女生的网名这么多〃 提交于 2019-12-25 22:50:57
描述: 给定一个字符串,找到最长子串的长度,而不重复字符。 例子: 给定 "abcabcbb" 的答案是 "abc" ,长度是3。 给定 "bbbbb" 的答案是 "b" ,长度为1。 给定 "pwwkew" 的答案是 "wke","kew" ,长度为3。 暴力法 ,最好想,先记录一个最大值,挨个遍历每个字符,找出重复的字符就从下一个字符接着遍历,更新最大值,最后遍历完成后,最大值就是最长的子串长度了. 暴力法的时间复杂度是O(n^2). /// 暴力枚举, void fun1() { NSString * s = @"abcdafhgh"; // 把单个字符放到数组里 NSMutableArray * array = [NSMutableArray array]; for (int i =0 ; i<s.length; i++) { NSString * temp = [s substringWithRange:NSMakeRange(i, 1)]; [array addObject:temp]; } int maxLength = 0; for (int i=0; i<array.count; i++) { // 用字典判断是否重复 NSMutableDictionary * dic = [[NSMutableDictionary alloc] init]; int j=i;

STL中vector,Map,Set的实现原理

一曲冷凌霜 提交于 2019-12-25 22:43:19
Map Map是关联容器,以键值对的形式进行存储,方便进行查找,关键词起到索引的作用,值则表示与索引相关联的数据,以红黑树的结构实现,插入删除等操作都可以在O(log n)时间内完成。 Set Set是关联容器,set中每个元素都只包含一个关键字,set支持高效的关键字查询操作—检查每一个给定的关键字是否在set中,set是以红黑树的平衡二叉检索树结构实现的,支持高效插入删除,插如元素的时候会自动调整二叉树的结构,使得每个子树根节点键值大于左子树所有节点的键值,小于右子树所有节点的键值,另外还得保证左子树和右子树的高度相等。 平衡二叉检索树使用中序遍历算法,检索效率高于vector,deque,list等容器,另外使用中序遍历可将键值按照从小到大遍历出来。 构造set集合的主要目的是为了快速检索,不可直接去修改键值 来源: CSDN 作者: 图灵图灵 链接: https://blog.csdn.net/qq_33904512/article/details/103706016

js实现无限极分类

落爺英雄遲暮 提交于 2019-12-25 18:52:52
转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要实现部门通讯录,后台传来的数据是直接从数据库里拿的部门表,所以没有层级分类,只有parentId表示从属关系,所以分类的事情就交给我来做了。 不能说效率多高,只是说能实现了。 其实ACMer或者学过点算法和数据结构的应该知道这其实就是一个树,用数组存罢了,用数组存树的方法相信各位ACMer已经用的不要不要的了,所有并没有什么难度,知道思路就很好写了。 思路 :获取到后台传来的数组dep,然后新建一个数组list,将dep遍历一遍,获取到每个节点的parentId,用parentId作为下标插入到list数组里面。 至此,构树完成。 接下来就是遍历了,我是采用递归遍历的,比较简洁,各位大神有什么更好的遍历方法也欢迎分享。 首先获取到根节点(也就是最顶级的那个分类)的下标,然后遍历这个下标中的每个节点的信息,并找出这个节点的id,然后重新传入递归函数即可。 下面是代码实现,注释依旧很清楚。相信应该能看懂,看不懂的多看几遍,照着码一遍应该就懂了。再不懂的,请照着程序走一遍应该就懂了。。要是....就转行吧。 1 //无限极分类创建部门列表 2 //递归创建无限极分类 3 function createList(list,index) 4 { 5 //获取当前index节点的子节点的信息 6 var tmp = list

jsp页面遍历List<Map<String,Object>>

。_饼干妹妹 提交于 2019-12-25 15:45:34
多表联查会有此类结果出现, 查阅发现基本解决思路是双重遍历,获取map,entry.value等方法. 最终发现可以使用c:forEach单次遍历,map中的key值大写,即可得到object. Controller层 @RequestMapping("findService.do") public String findAll(ServicePage page,Model model){ List<Map<String,Object>> services = serviceDao.findByPage(page); model.addAttribute("services", services); return "service/service_list"; } jsp页面(myeclipse大写快捷键 Ctrl+Shift+X) <c:forEach items="${services}" var="s"> <tr> <td>${s.ACCOUNT_ID }</td> <td>${s.IDCARD_NO }</td> <td>${s.REAL_NAME }</td> </tr> </c:forEach> 结果 来源: https://www.cnblogs.com/jpfss/p/9675700.html

二叉树遍历python

大憨熊 提交于 2019-12-25 13:45:32
二叉树遍历有先序遍历中序遍历和后序遍历 以下遍历以该二叉树为例: 3.1 前序遍历   思想:先访问根节点,再先序遍历左子树,然后再先序遍历右子树。总的来说是根—左—右   上图先序遍历结果为为:   代码如下: def PreOrder ( self , root ) : '''打印二叉树(先序)''' if root == None : return print ( root . val , end = ' ' ) self . PreOrder ( root . left ) self . PreOrder ( root . right ) 3.2 中序遍历   思想:先中序访问左子树,然后访问根,最后中序访问右子树。总的来说是左—根—右   上图中序遍历结果为为:   代码如下: def InOrder ( self , root ) : '''中序打印''' if root == None : return self . InOrder ( root . left ) print ( root . val , end = ' ' ) self . InOrder ( root . right ) 3.3 后序遍历   思想:先后序访问左子树,然后后序访问右子树,最后访问根。总的来说是左—右—根   上图后序遍历结果为为:   代码如下: def BacOrder (

数据结构和算法之二叉树

可紊 提交于 2019-12-25 07:09:26
一、为什么需要树这种数据结构 是因为之前的数组和链表两种存储结构对增删改查都各有利弊,而且差异明显。所以树这种结构就是增删改查效率差异不是很明显,增删改查所耗费时间都比较均衡的一种数据结构。 1、数组存储方式 1.1、优点 通过下标方式访问元素,速度快 。对于有序数组,还可以使用 二分查找 来提高检索速度。 1.2、缺点 若检索具体某个值,或 插入值(按一定顺序),会整体移动 。效率较低。 2、链表存储方式 2.1、优点 在一定程度上对数组存储方式进行了优化(比如插入一个节点,只需要将插入节点连接到链表中即可,删除效率也很好) 2.2、缺点 在进行检索时,效率仍然很低,比如检索某个值,需要从头节点开始遍历进行判断。 3、树存储方式 3.1、说明 可以利用 二叉排序树(Binary Sort Tree) ,既可以保证数据的检索速度,同时也可以保证数据的插入、删除、修改的速度。 二叉排序树就是要求任何 左侧 子节点的值都大于当前父节点, 右侧 子节点的值都小于当前父节点。 3.2、案例 3.2.1、假设有一颗二叉排序树【8 4 11 2 6 10 13】,如下图所示 二叉排序树, 左侧 子节点的值都大于当前父节点, 右侧 子节点的值都小于当前父节点。 3.2.2、如下需求 3.2.2.1、查找10 具体步骤: 总共需要两次查找 1、判断10与根节点大小,大于根节点,在右侧查找 2