遍历

csp练题记录(C语言,编译器dev c++)201912-2回收站选址

ぃ、小莉子 提交于 2020-02-08 06:29:37
csp练题记录(C语言,编译器dev c++)201912-2回收站选址 文章目录 一、题目描述 二、思路分析 三、代码 四、反思总结 一、题目描述 二、思路分析 解这道题我觉得需要以下两个步骤:1、找出所有的备选地址,用sel[]数组来标识是否是备选地址(在初始代码中);2、对所有备选地址进行评分。 其中,备选地址要具备:它上、下、左,右四邻位都有垃圾;对它评分时,就是看它左上、左下、右上,右下四个对角线元素的有垃圾的个数,分值0~5分。 开始的时候,怎么存储坐标信息让我感觉一筹莫展:想用链表来存储,每一个节点存储了它的上下左右四邻位的信息,这样遍历一遍就可以得到所有的备选地址,但这样带来了一个新的问题:评分时考虑的是它对角线上的,就很麻烦,水平不够,自然是整得越简单越好,于是干脆设置一个二维数组,简单直接。 初始的代码能跑,但很粗糙、暴力:对每一个坐标都完整遍历一遍数组,这样找出它上下左右四邻位共有几处有垃圾,当计数值count为4时,说明它是备选位置。参阅博客和咨询dalao后有了改进思路。 第一次优化思路 邻位的两个元素是相互的,你是我的左,那么相对的,你就是我的右。同理,上下也有一样的性质,也就是说,不必像初始代码中那样每次都完整遍历一遍。因此找备选地址时,就有以下的思路: (个人感觉有点像递归)遍历到第i个元素时,由于邻位的概念如上是相互的

前向星

主宰稳场 提交于 2020-02-08 02:20:38
什么是前向星? 一种数据结构,以储存边的方式来存储图。构造方法如下:读入每条边的信息,将边存放在数组中,把数组中的边按照起点顺序排序(可以使用基数排序,如下面例程),前向星就构造完了。通常用在点的数目太多,或两点之间有多条弧的时候。一般在别的数据结构不能使用的时候才考虑用前向星。除了不能直接用起点终点定位以外,前向星几乎是完美的。 效率: 时间复杂度O(m),m为边数,总体时间并不会逊色于邻接表。 代码如下: 其中edge[i].to表示第i条边的终点,edge[i].next表示与第i条边同起点的下一条边的存储位置,edge[i].dis为边权值 另外还有一个数组head[],它是用来表示以i为起点的第一条边存储的位置,实际上你会发现这里的第一条边存储的位置其实在以i为起点的所有边的最后输入的那个编号 # include <iostream> # include <algorithm> # include <stdio.h> # define MAXE 600 # define MAXN 600 using namespace std ; int m , cnt = 0 , head [ MAXN ] ; //另外还有一个数组head[],它是用来表示以i为起点的第一条边存储的位置,实际上你会发现这里的第一条边存储的位置其实 //在以i为起点的所有边的最后输入的那个编号

树的遍历

本秂侑毒 提交于 2020-02-08 01:03:36
//二叉树的创建,递归遍历,非递归遍历,拷贝,深度 #include<iostream> #include<stack> using namespace std ; //二叉树的结构 typedef struct BiTNode { char data ; //数据域 struct BiTNode *lchild = nullptr ; //指针必须初始化,c11标准 struct BiTNode *rchild = nullptr ; //左右孩子 } BiTNode,*BiTree ; //二叉树的结构 //二叉树的创建 void CreateBiTree ( BiTree & T ) //先序输入 { char ch ; cin >> ch ; if ( ch == '#' ) T = NULL ; else { T = new BiTNode ; //分配空间 T- > data = ch ; //根节点赋值 CreateBiTree ( T- > lchild ) ; //建立左子树 CreateBiTree ( T- > rchild ) ; //建立右子树 } } //二叉树的创建 //先序遍历 void PreTraverse ( BiTree T ) { if ( T ) { cout << T- > data ; PreTraverse ( T- >

二叉树遍历算法

泪湿孤枕 提交于 2020-02-07 15:51:20
二叉树 是树(Tree)这一数据结构中非常重要的子类,其中每一个节点最多存在两个子节点,在代码中表示就是,除了本身的 Data 值,还会带有 Left 和 Right 子节点。如下图所示,用形如图中的结构构成了整棵树。 任何一种数据结构,都会存在遍历的顺序问题,比如链表,堆栈等等;二叉树这种数据结构也有遍历的顺序,由于其非线性的结构特征,遍历时的顺序有这三种, 前序(pre-order),中序(in-order),后序(post-order) 。下面依次介绍一下: 1 前序(pre-order)遍历 基本的原则是 “根 -> 左 -> 右” ,重复直到整棵树的节点被浏览一遍。 1.1 Recursive 版本: 1 def preOrder( self, treenode ): 2 # Recursive version 3 if treenode == None: 4 return 5 print treenode.data 6 self.preOrder( treenode.left ) 7 self.preOrder( treenode.right ) 这段代码非常好理解,它就是用“根 -> 左 -> 右”的定义方式来写的,迭代调用,直至没有节点可以访问。 print treenode.data # 打印访问节点(根)的值 self.preOrder( treenode )

二叉树的代码实现 JAVA 版本

こ雲淡風輕ζ 提交于 2020-02-07 13:14:22
本文主要实现二叉树的简单功能: (1)二叉树的生成 (2)二叉树的遍历:前序遍历,中序遍历,后序遍历,层次遍历 (3)二叉树的删除 (3)判断节点是否存在的功能 package ds.tree; import ds.link.Node; import java.util.LinkedList; import java.util.Queue; /** * @author : cuantianhou 2019/12/17 */ public class BinaryTree <T extends Comparable<T>>{ private Node<T> root; private int capacity = 0; public T insert(T data){ /** * Step1: 如果该节点为空,将该节点设置为根节点,父节点为空,返回出入值 * * */ capacity++; if(root == null) { root = new Node<T>(data,null); return root.data; } /** * Step2:从根节点遍历,插入节点比当前节点小,把当前节点设置为左子节点,然后与左子比较, * 插入节点比当前节点大,把当前节点设置为右子节点,然后与右子比较,插入节点和当前节点相等 * 覆盖并返回当前值 **/ //父节点 Node<T>

js中的几种遍历方式

此生再无相见时 提交于 2020-02-07 11:20:41
1.for循环 最常用的一种循环,常用于普通数组的遍历 场景1:普通数组 var arr = [ "苹果" , "香蕉" , "雪梨" ] ; for ( var i = 0 ; i < arr . length ; i ++ ) { console . log ( arr [ i ] ) ; //打印 苹果 香蕉 雪梨 } 场景2:数组里面装对象 var arr = [ { name : "hu" , age : 11 } , { name : "huww" , age : 20 } ] ; for ( var i = 0 ; i < arr . length ; i ++ ) { console . log ( arr [ i ] ) ; console . log ( arr [ i ] . name ) ; console . log ( arr [ i ] . age ) ; } 2.forEach循环 常用于遍历对象,也就是for循环中的场景2 myArray.forEach(function (value) { console.log(value); }); 实际上forEach有三个参数 分别为 值 下标 数组本身 于是我们有 [].forEach(function(value, index, array) { // … }); 对比jQuery中的$.each方法

二叉树遍历

不羁岁月 提交于 2020-02-07 07:06:55
前序遍历:根->左->右 中序遍历:左->根->右 后序遍历:左->右->根 假设树节点的定义如下: struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {} }; 递归版 //前序遍历 void preorderTraversalRecursion(TreeNode *node) { if(!node) return; cout << node->val << " ";//操作当前节点 preorderTraversalRecursion(node->left); preorderTraversalRecursion(node->right); } //中序遍历 void inorderTraversalRecursion(TreeNode *node) { if(!node) return; inorderTraversalRecursion(node->left); cout << node->val << " ";//操作当前节点 inorderTraversalRecursion(node->right); } //后序遍历 void postorderTraversalRecursion(TreeNode

JAVA中的集合框架(上)List

╄→гoц情女王★ 提交于 2020-02-07 06:56:58
第一节 JAVA中的集合框架概述 集合的概念,现实生活中:很多事物凑在一起就是一个集合;数学中的集合:具有相同属性事物的总体;JAVA中的集合:是一种工具类,就像是容器,储存任意数量的具有共同属性的对象。集合的作用:在类的内部,对数据进行组织(如果有些属性类型相同,但意义与作用不同,咱们就不能把它们放到集合,如学生的姓名和性别属性),简单而快速的搜索大数量的条目。 有的集合接口,提供了一系列排列有序的元素,并且可以在序列中间快速的插入或者删除有关元素; 有的集合接口,提供了映射关系,可以通过关键字key去快速查找到对应的唯一对象,而这个关键字可以是任意类型。 集合其实就是用来承装其它对象的容器。 与数组相比,为何选择集合而不是数组?数组的长度固定,还得复制,集合的长度可变。数组只能通过数组下标访问元素,类型固定,而有的集合可以通过任意类型查找所映射的具体对象,数组还要遍历元素比较麻烦。 集合的框架体系结构: 将collection想象成单身宿舍,三个子接口。 1.List(序列):排列有序,可重复 2.Queue(队列):排列有序,可重复 3.set(集):无序,不可重复 将map当成成对出现,Collection 是存储的一个一个的对象,而Map提供映射的关系,内部以的Key,Value两个对象为一个映射来存储数据,Entry类(键值对)是Map的内部类,Key

第十周web作业1

别来无恙 提交于 2020-02-07 00:54:49
for each in: 使用一个变量迭代一个对象的所有属性值,对于每一个属性值,有一个指定的语句块被执行. 语法: 1 for each (variable in object) { 2 statement 3 } 参数: variable: 用来遍历属性值的变量,前面的 var 关键字是可选的.该变量是函数的局部变量而不是语句块的局部变量. object: 该对象的属性值会被遍历. statement: 遍历属性值时执行的语句. 如果想要执行多条语句, 请用( { ... } ) 将多条语句括住. 一些对象的内置属性是无法被遍历到的,包括所有的内置方法,例如String对象的 indexOf 方法.不过,大部分的用户自定义属性都是可遍历的. 警告: 永远不要使用for each...in语句遍历数组,仅用来遍历常规对象。 例子: 1 var sum = 0; 2 var obj = {prop1: 5, prop2: 13, prop3: 8}; 3 4 for each (var item in obj) { 5 sum += item; 6 } 7 8 print(sum); // 输出"26",也就是5+13+8的值 for in: 以任意顺序遍历一 个对象的可枚举属性。对于每个不同的属性,语句都会被执行。 语法: 1 for (variable in object) {

JAVA 集合类(一)

房东的猫 提交于 2020-02-06 20:02:01
目录 java集合框架 集合框架设计目标 Java集合具备的特点 集合框架类型 Java集合框架图 java集合使用Demo Java集合框架的工具类 Arryas的asList方法测试Demo Arrays部分功能测试Demo Collections测试Demo Comparable 与 Comparator 测试Demo 集合遍历方式 常见的遍历方式 集合遍历demo java集合框架 集合框架设计目标 该框架必须是高性能的 , 基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。 该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性 对一个集合的扩展和适应必须是简单的 Java集合具备的特点 只能存储引用类型,不能存储基本数据类型 (可以存储基本数据类型包装类) 存储对象的引用,对象本身在堆内存 可以存储不同的数据类型(泛型),不建议使用 长度可变 备注:数组可以存储基本数据类型和引用数据类型;长度不可变;只能存储一种数据类型 集合框架类型 常用类型 实现类 数据结构 有序 允许空 线程安全 场景 List ArrayList 数组 Y Y 不同步 元素有序;可重复; 查询快,增删慢 Vector 数组 Y Y 同步 同ArrayList且线程安全(不建议使用合) LinkedList 双向链表 Y Y 不同步 元素有序;可重复; 查询慢,增删快 Map