遍历

20182318 2019-2020-1 《数据结构与面向对象程序设计》实验九报告

醉酒当歌 提交于 2020-01-12 13:48:01
20182318 2019-2020-1 《数据结构与面向对象程序设计》实验九报告 课程:《程序设计与数据结构》 班级: 1823 姓名: 王振澳 学号:20182318 实验教师:王志强 实验日期:2019年12月2日 必修/选修: 必修 1.实验内容 初始化:根据屏幕提示(例如:输入1为无向图,输入2为有向图)初始化无向图和有向图(可用邻接矩阵,也可用邻接表),图需要自己定义(顶点个数、边个数,建议先在草稿纸上画出图,然后再输入顶点和边数)(2分) 图的遍历:完成有向图和无向图的遍历(深度和广度优先遍历)(4分) 完成有向图的拓扑排序,并输出拓扑排序序列或者输出该图存在环(3分) 完成无向图的最小生成树(Prim算法或Kruscal算法均可),并输出(3分) 完成有向图的单源最短路径求解(迪杰斯特拉算法)(3分) PS:本题12分。目前没有明确指明图的顶点和连通边,如果雷同或抄袭,本次实验0分。、 2. 实验过程及结果 生成树 图的遍历 拓扑排序 prim算法 迪杰斯特拉算法 具体代码见码云 3. 实验过程中遇到的问题和解决过程 问题一:实验过程中对图各个边的权值进行赋值的操作问题 问题一解决办法:选择使用二维数组,并将0行和0列设置为0,不使用。便于后面程序编写时的理解,给自己减少负担。这个二维数组需要自己手动写好在代码里。 其他(感悟、思考等) 实验终于做完了,有很多遗憾

java中的安全失败(fail-safe)机制理解

[亡魂溺海] 提交于 2020-01-12 12:41:42
采用安全失败机制的集合容器,在遍历时不是直接在集合内容上访问的,而是先复制原有集合内容,在拷贝的集合上进行遍历。 由于迭代时是对原集合的拷贝进行遍历,所以在遍历过程中对原集合所作的修改并不能被迭代器检测到,所以不会触发Concurrent Modification Exception。 缺点:基于拷贝内容的优点是避免了Concurrent Modification Exception,但同样地,迭代器并不能访问到修改后的内容,即:迭代器遍历的是开始遍历那一刻拿到的集合拷贝,在遍历期间原集合发生的修改迭代器是不知道的。 java.util.concurrent包下的容器都是安全失败,可以在多线程下并发使用,并发修改。 www.askcto.com 来源: CSDN 作者: askcto 链接: https://blog.csdn.net/askcto/article/details/103751541

迭代器模式(Iterator Pattern)

故事扮演 提交于 2020-01-12 11:29:22
模式动机: 1 、一个聚合对象,如一个列表 (List) 或者一个集合 (Set) ,应该提供一种方法来让别人可以访问它的元素,而又不需要暴露它的内部结构。 2 、针对不同的需要,可能还要以不同的方式遍历整个聚合对象,但是我们并不希望在聚合对象的抽象层接口中充斥着各种不同遍历的操作。 3 、怎样遍历一个聚合对象,又不需要了解聚合对象的内部结构,还能够提供多种不同的遍历方式,这就是迭代器模式所要解决的问题。 4 、在迭代器模式中, 提供一个外部的迭代器来对聚合对象进行访问和遍历,迭代器定义了一个访问该聚合元素的接口,并且可以跟踪当前遍历的元素,了解哪些元素已经遍历过而哪些没有。 5 、有了迭代器模式,我们会发现对一个复杂的聚合对象的操作会变得如此简单。 模式意图: 迭代器模式 (Iterator Pattern) :提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标 (Cursor) 。迭代器模式是一种对象行为型模式。 UML 图: 角色: Iterator: 抽象迭代器定义了访问和遍历元素的接口。 ConcreteIterator: 具体迭代器实现了抽象迭代器接口,完成对聚合对象的遍历。 Aggregate: 抽象聚合类用于存储对象,并定义创建相应迭代器对象的接口。 ConcreteAggregate: 具体聚合类实现了创建相应迭代器的接口。 模式分析: 1

实习生招聘--CVTE笔试【1】

♀尐吖头ヾ 提交于 2020-01-12 09:17:03
1.说出你知道的文件系统,至少3种。 NTFS、FAT、exFAT、Ext、HFS 2.可重入函数的条件有哪些? 1.这个函数可以被中断 2.它除了使用自己栈上的变量以外不依赖于任何环境(包括static) 3.C语言中如何防止头文件的重复定义。 在前边加上关键字extern 4.以下说法正确的有(A,B) A.多个进程操作同一个文件时,应该要考虑到文件的一致性问题 B.可通过文件在不同进程间进行数据传递和共享 5.IP数据报分片的重组通常发生在() 目的主机上 6.引入多道程序技术以后,处理器的利用率() 大大提高 7.关于TCP协议以下说法正确的是:() TIME_WAIT状态会持续2个MSL 通讯双方主动关闭的一方进入TIME_WAIT状态 8.以下说法正确的是(A) A.在计算机中,运算器访问寄存器的速度是最快的 B.在等待中断的过程中,CPU不可以处理其他任务 C.同一段代码每次运行的时间一定是一样的 D.软中断是由软件触发的一种中断 9.一个栈的入栈序列为ABCDE,则不可能的出栈序列为(A、B) A.ECDBA B.DCEBA C.DECBA D.ABCDE 10.TCP首部报文信息中跟建立链接有关的是(B 、D) A.PSH B.SYN C.FIN D.ACK 11.已知图的邻接表如下所示,根据算法,则从节点0出发按广度优先遍历的节点序列是 © A.0 1 2 3

python-迭代器模式

风流意气都作罢 提交于 2020-01-12 09:09:53
源码地址: https://github.com/weilanhanf/PythonDesignPatterns 说明: 集合是用来管理和组织数据对象的数据结构的。集合有两项基本职能:一、批量的存储数据对象,二、在不暴露集合内部结构的条件下向外界提供访问内部元素的接口(可能存在的遍历方式:顺序、逆序遍历,二叉树的广度优先,先序后序中序遍历等)。要使得集合保持整洁和优雅,而不是说令集合内部包含着各种遍历的方法。因此要求将遍历的方法从集合的指责中分离出来,按照不同的遍历需求分别封装成一个个专门遍历集合内部数据的迭代器。这种思想可以最大限度的减少彼此之间的耦合程度,从而建立一个松散耦合的对象网络。职责分离的要点就是要对分离的职责进行封装,并以抽象对象的方式建立彼此之间的关系。 迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,且不用暴露该对象的内部表示 聚合对象的两个职责: 存储数据,聚合对象的基本职责 遍历数据,既是可变化的,又是可分离的。将遍历数据的行为从聚合对象中分离出来,封装在迭代器对象中。由迭代器来提供遍历聚合对象内部数据的行为,简化聚合对象的设计,更符合单一职责原则。 迭代器模式包含以下4个角色: Iterator(抽象迭代器) ConcreteIterator(具体迭代器) Aggregate(抽象聚合类) ConcreteAggregate(具体聚合类) 实例:

ES6基础

假如想象 提交于 2020-01-12 08:46:32
// 数组的扩展 let arr=[3,5,7]; let arr2=Array.from(arr,(x)=>x*5);//新数组 console.log(arr2); for (const item of arr) {//for of 遍历数组元素 console.log(item); } for (const elem of arr2.values()) { console.log(elem);//键值 } //Array.prototype.flat()拉平数组 // 对象的扩展 for in 遍历对象 var myObject={   a:1,   b:2,   c:3 } console.log(Object.keys(myObject)); for (var key in myObject) { console.log(key);//a b c } const proto = { foo: 'hello' }; const proto2 = { foo: 'hello' }; const obj = {// super指向当前对象的原形对象 foo: 'world', find() { return super.foo; } }; Object.setPrototypeOf(obj, proto);//设置对象obj的原型对象 console.log(obj.find(

Python列表遍历

两盒软妹~` 提交于 2020-01-12 04:11:18
列表的循环遍历 1. 使用for循环 为了更有效率的输出列表的每个数据,可以使用循环来完成 demo: namesList = ['xiaoWang','xiaoZhang','xiaoHua'] for name in namesList: print(name) 结果: xiaoWang xiaoZhang xiaoHua 2. 使用while循环 为了更有效率的输出列表的每个数据,可以使用循环来完成 demo: namesList = ['xiaoWang','xiaoZhang','xiaoHua'] length = len(namesList) i = 0 while i<length: print(namesList[i]) i+=1 结果: xiaoWang xiaoZhang xiaoHua 来源: https://www.cnblogs.com/yzg-14/p/12181749.html

图的深度、广度优先、最小生成树、最短路径算法(Java版本)

早过忘川 提交于 2020-01-12 01:15:28
介绍 本文提供了图的邻接表、邻接矩阵的Java实现,包括深度优先算法、广度优先算法、prim算法和地杰斯特拉算法。 原理分析 输入图: 深度优先遍历: 广度优先遍历: 注意 :邻接矩阵和邻接表同样的输入遍历的结果可能会不完全一样,原因邻接表的构造并非将小编号的结点连接在靠前的位置,因此导致遍历结果和邻接矩阵不相同,但其在逻辑上仍然满足图的深度优先遍历。另外,最小生成树和最短路径当图中存在两条相同长度的路径时,其结果也不一定唯一。 算法描述 包结构: import java . util . List ; public interface Graph { public void dfsTraverse ( ) ; //深度优先遍历 public void bfsTraverse ( ) ; //广度优先遍历 public List < String > prim ( ) ; //prim算法 public List < String > dijistra ( int v1 , int v2 ) ; //地杰斯特拉算法 } import java . util . ArrayList ; import java . util . List ; import java . util . Scanner ; /** * 使用邻接表 */ public class AGraph

L2-006 树的遍历

雨燕双飞 提交于 2020-01-11 23:39:17
给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。 输入格式: 输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。 输出格式: 在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。 输入样例: 7 2 3 1 5 7 6 4 1 2 3 4 5 6 7 输出样例: 4 1 6 3 5 7 2 #include<bits/stdc++.h> #define INF 0x3f3f3f3f typedef long long ll; using namespace std; const int maxn = 50; int n; typedef struct node { int data; node * lef; node * rig; }node,*tree; void build_tree(int *las,int *mid,int cnt,tree &tre) { if(cnt == 0) { tre = NULL; return; } tre = new node; tre->data = las[cnt - 1]; int i; for(i = 0;mid[i]!=las[cnt - 1];i++); build_tree

es6:阮一峰教程学习

烈酒焚心 提交于 2020-01-11 11:00:36
全局作用域 函数作用域 块级作用域 一:块级作用域 1.外层作用域无法读取内层作用域的变量 2.let const声明的变量只能先声明,后使用。 let const都是块级作用域!  const声明的变量必须赋初始值且不可变,像final! 不可变是指引用不可变,也就是内存中的那片地址。 Object.freeze(要冻结对象) 引用指向的对象不可变哦! const声明引用不可变! 3.es6六种声明变量的方法:var function let const import class 4.模块化编程:封装的思想哦!  作用域 5.顶层对象 全局对象 二:变量的解构赋值 1.数组 赋值的时候,进行模式匹配!   就是按照模式匹配的方式来赋值!(解构) 模式不匹配:解构失败 只要某种数据结构是可遍历的,那么就可以进行解构赋值。 2.对象 解构赋值:模式匹配的时候按照key、value匹配。不同于数组是按照索引。 3.字符串 三: 五:数组扩展 1. Array.from() 方法用于将两类对象转为真正的数组: 类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map)。 2. Array.of() 方法用于将一组值,转换为数组。 3. Array.copyWithin() 在当前数组内部,将指定位置的成员复制到其他位置