遍历

数组的遍历方法

橙三吉。 提交于 2019-12-06 08:57:07
以...为例 let arr = [1,2,3,4] let Arr = [ {id: 0, name: '小明' }, {id: 1, name: '小白' }, {id: 2, name: '小红' }, {id: 3, name: '小新' } ] for for (let i = 0; i < 6; i++) { } for in 遍历数组索引 for (i in arr) { console.log(i); }// 0、1、2、3 for of   遍历数组元素值 for (v in arr) { console.log(i); } // 1、2、3、4 forEach 遍历数组中的每一项,没有返回值,对原数组没有影响 arr.forEach((value,index,arr) => { }); value 必需,当前元素 index 可选,当前元素的索引值 arr 可选,当前元素所属的数组对象 indexOf 返回某个指定的值在数组中首次出现的位置 arr.indexOf(value,fromindex) value 必需,规定需检索的字符串值。 fromindex 可选的整数参数,规定在字符串中开始检索的位置 lastIndexOf 返回某个指定的值在数组中最后出现的位置,用法同 indexOf find 返回一个符合条件的数组第一个元素值 常用语法: arr

ConcurrentHashMap源码走读

元气小坏坏 提交于 2019-12-06 08:41:50
目录 ConcurrentHashMap源码走读 简介 放入数据 容器元素总数更新 容器扩容 协助扩容 遍历 ConcurrentHashMap源码走读 简介 在从JDK8开始,为了提高并发度, ConcurrentHashMap 的源码进行了很大的调整。在JDK7中,采用的是分段锁的思路。简单的说,就是 ConcurrentHashMap 是由多个 HashMap 构成。当需要进行写入操作的时候,会寻找到对应的 HashMap ,使用 synchronized 对对应的 hashmap 加锁,然后执行写入操作。显然,并发程度就取决于 HashMap 个数的多少。而在JDK8中换了一种完全不同的思路。 首先,仍然是使用 Entry[] 作为数据的基本存储。但是锁的粒度被缩小到了数组中的每一个槽位上,数据读取的可见性依靠 volatile 来保证。而在尝试写入的时候,会将对应的槽位上的元素作为加锁对象,使用 synchronized 进行加锁,来保证并发写入的安全性。 除此之外,如果多个Key的 hashcode 在取模后落在了相同的槽位上,在一定数量内(默认是8),采用链表的方式连接节点;超过之后,为了提高查询效率,会将槽位上的节点转为使用红黑树结构进行存储。 还有一个比较大的改变在于当进行扩容的时候,除了扩容线程本身,如果其他线程识别到了扩容进行中,则会尝试协助扩容。

js学习:对象

本秂侑毒 提交于 2019-12-06 07:20:52
概述 对象(object)是 JavaScript 语言的核心概念,也是最重要的数据类型 生成方法 var obj = { foo: 'Hello', bar: 'World' }; 对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。 键名与键值之间用冒号分隔,两个键值对之间用逗号分隔 键名 对象的所有键名都是字符串(ES6 又引入了 Symbol 值也可以作为键名),所以加不加引号都可以。上面的代码也可以写成下面这样。 var obj = { 'foo': 'Hello', 'bar': 'World' }; 如果键名是数值,会被自动转为字符串。 var obj = { 1: 'a', 3.2: 'b', 1e2: true, 1e-2: true, .234: true, 0xFF: true }; obj // Object { // 1: "a", // 3.2: "b", // 100: true, // 0.01: true, // 0.234: true, // 255: true // } obj['100'] // true 上面代码中,对象obj的所有键名虽然看上去像数值,实际上都被自动转成了字符串。 如果键名不符合标识名的条件(比如第一个字符为数字,或者含有空格或运算符),且也不是数字,则必须加上引号,否则会报错。 // 报错

860. 柠檬水找零

試著忘記壹切 提交于 2019-12-06 07:02:57
860. 柠檬水找零 在柠檬水摊上,每一杯柠檬水的售价为 5 美元。 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。 每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。 注意,一开始你手头没有任何零钱。 如果你能给每位顾客正确找零,返回 true ,否则返回 false 。 示例 1: 输入:[5,5,5,10,20] 输出:true 解释: 前 3 位顾客那里,我们按顺序收取 3 张 5 美元的钞票。 第 4 位顾客那里,我们收取一张 10 美元的钞票,并返还 5 美元。 第 5 位顾客那里,我们找还一张 10 美元的钞票和一张 5 美元的钞票。 由于所有客户都得到了正确的找零,所以我们输出 true。 示例 2: 输入:[5,5,10] 输出:true 示例 3: 输入:[10,10] 输出:false 示例 4: 输入:[5,5,10,10,20] 输出:false 解释: 前 2 位顾客那里,我们按顺序收取 2 张 5 美元的钞票。 对于接下来的 2 位顾客,我们收取一张 10 美元的钞票,然后返还 5 美元。 对于最后一位顾客,我们无法退回 15 美元,因为我们现在只有两张 10 美元的钞票。 由于不是每位顾客都得到了正确的找零,所以答案是 false。

数据结构树的专题

梦想的初衷 提交于 2019-12-06 06:57:39
一、二叉树的基本操作 #include<stdio.h> #include<stdlib.h> typedef char ElemType; typedef struct Node { ElemType data; struct Node *lchild, *rchild; } BiTree; BiTree *createBT() //键盘输入创建二叉树 { BiTree *b; ElemType ch; scanf("%c", &ch); fflush(stdin); // 清空键盘缓冲 if(ch != '#') // #表示空 { b = (BiTree *)malloc(sizeof(BiTree)); b->data = ch; printf("请输入%c的左孩子:", ch); b->lchild = createBT(); printf("请输入%c的右孩子:", ch); b->rchild = createBT(); } else b = NULL; return b; } void createBT(BiTree *&b, char *s) //用括号表示法的字符串s生成二叉树b { BiTree *st[100], *t; //st存放树结点的栈 int top = -1; int k; //k=1表示左孩子, k=2表示右孩子 b = NULL; while

Populating Next Right Pointers in Each Node

女生的网名这么多〃 提交于 2019-12-06 05:38:20
描述:   填充每一个节点的下一个右侧指针,给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:   struct Node {   int val;   Node *left;   Node *right;   Node *next;   }   填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。   初始状态下,所有 next 指针都被设置为 NULL。 解答:   看到该问题的描述,从图形上直观的来看,本题和二叉树的层次遍历是相关的。因为填充右侧节点的操作总是在统一层上进 行的。而二叉树的遍历总是分为递归和迭代算法两种,我们也尝试使用两种算法来解决问题。   首先使用递归的算法,递归算法的核心是找出所有操作的自相似性,因此我们观察对于每个节点的操作。如果当前的节点为空 则不进行任何操作。若当前的节点不为空,若其左子树存在的话,则右子树也是必然存在的,且其next指向其右子树。右子树的next 取值则取决于当前节点的next,若当前节点的next存在,则右子树的next为root->next->left。则按照此分析写出来的递归代码如下: class Solution { public: //首先为递归的写法,该道题为二叉树的层次遍历的应用 Node* connect

20182315 第十周学习总结

a 夏天 提交于 2019-12-06 05:37:13
学号 20182315 《数据结构与面向对象程序设计》第10周学习总结 教材学习内容总结 第十周主要讲图的相关构成,因此我的学习思路是:依次学习图的类别,图得实现方法,图的遍历,最优图。 图的类别:图可分为有向图,无向图,带权图。顾名思义,无向图即为节点与节点之间没有方向。有向图的节点与节点之间有方向。带权图节点与节点之间的边有意义,其边有权值。 图得实现方法:图的实现方法有连接表,连接矩阵。连接矩阵本质上是一个二维数组,分为横向和纵向两个方向。可以以横向到纵向定义节点方向。连接表即为二维数组,数组头为每一个结点,后序结点为与数组头连接的结点。 图的遍历:图的遍历较为复杂,分为广度优先遍历与深度优先遍历。 (1)广度优先遍历:广度优先遍历要用到队列知识存放结点和MashMap来确定是否访问过此结点, 将起始点存入队列中,将其标记为以访问存入MashMap中。在将结点从队里取出,搜索该结点所连接的结点,将他们存入队中,设为以访问。再将他们依此取出进行上述操作,直到队列里没有需要操作的数字。 (2)深度优先遍历:广度优先遍历用栈来代替队列,因为他有先进先出的特性,另外,深度优先遍历直到结点进入迭代器将其设为已访问。 图的连接性:图得连接性可通过遍历来体现,如果图是全部连接起来的,那无论通过哪个节点进行遍历,遍历结点的结果都是一样的。如果不连通,那必定有一个结点的遍历结果为1。

20182324 2019-2020-1 《数据结构与面向对象程序设计》第10周学习总结

点点圈 提交于 2019-12-06 05:32:06
目录 20182324 2019-2020-1 《数据结构与面向对象程序设计》第10周学习总结 教材学习内容总结 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错题总结 结对及互评 点评: 点评过的同学博客和代码 其他(感悟、思考等,可选) 学习进度条 参考资料 20182324 2019-2020-1 《数据结构与面向对象程序设计》第10周学习总结 教材学习内容总结 1、图 ( graph ) 由顶点 ( vertice ) 和边 ( edge ) 构成。一个图(Graph)是一个序偶<V, E>,记为G = <V, E>,其中: ( 1 )V = { v1 , v2 , … , vn } 是有限非空集合,vi 称为结点,V 称为结点集。 ( 2 )E 是有限集合,称为边集。E 中的每个元素都是 V 中顶点偶对,称之为边。 图中表示边的顶点对是无序的图是无向图 ( undirected graph )。图中的边是顶点的有序对的图称为有向图 ( directed graph,or digraph ) 2、图的表示:图可以用文字符号表述,也可以用图形描述,有两种形式: ( 1 )集合表示:对于一个图 G,如果将其记为 G = < V , E >,并写出 V 和 E 的集合表示,称为图的集合表示。 ( 2 )图形表示:用小圆圈表示 V 中的结点,用由 u

os.walk()的实际应用

两盒软妹~` 提交于 2019-12-06 05:23:10
背景: 通过Mobaxterm从本地上传虹膜数据,一共79个类,每类里包含左右眼各400张数据,总共63200张,上传期间断网不确定是否传完。 思路: 1.首先遍历总类别数是否正确,若不足79,返回“上传失败!” 2.逐一遍历左右眼@#¥##¥%¥%¥突然想到了os.walk()! os.walk()用类似于深度遍历的方式遍历文件夹中的子文件夹以及文件。每次返回一个三元组分别包含root,dirs,filesroot:当前文件夹的名称dirs: root文件夹下的子文件夹files:root文件下下的文件 1 import os 2 filepath= '/media/disk/jiangxue/data/JLU-6.0/' 3 count=0 4 for root,dirs,files in os.walk(filepath): 5 if (len(dirs)==79 or len(dirs)==0 or len(dirs)==2): 6 if (len(files)==0 or len(files)==400): 7 print( root,'上传成功!') 8 else: 9 print(root,'上传失败!') 运行结果: ……/media/disk/jiangxue/data/JLU-6.0/16/R 上传成功! /media/disk/jiangxue/data

20182328 2019-2020-1 《数据结构与面向对象程序设计》第十周学习总结

∥☆過路亽.° 提交于 2019-12-06 05:12:20
20182328 2019-2020-1 《数据结构与面向对象程序设计》第十周学习总结 教材学习内容总结 图的概念 图由顶点和边组成。 邻接的(adjacent):图中的两个顶点之间有一条连通边。 邻居:邻接顶点。 自循环(环):连通一个顶点及其自身的边。 路径:由一个顶点到达另一个顶点。 路径长度:路径边的条数(顶点数 - 1)。 环路:一种首顶点和末顶点相同且没有重边的路径。没有环路则是无环的(acyclic)。 图的种类 无向图:是一种边为无序结点对的图。 完全的:无向图拥有最大数目的连通顶点的边。对于n个顶点的无向图,要是完全的,要有n(n-1)/2条边,假设没有边是自循环的。 连通的:无向图中任意两个顶点之间都存在一条路径。 无向树:一种连通的无环无向图,其中一个元素被指定为树根。 有向图:也称双向图,一种边为有序顶点对的图。 有向图的路径不是双向的,反方向路径不成立。 有向树:指定一个元素作为树根。 不存在其他顶点到树根的连接。 每个非树根元素恰好有一个连接。 树根到每个其他顶点都有一条路径。 网络:一种每条边都带有权重或代价的图。路径权重是该路径中各条边权重的和。 图的算法 遍历 广度优先遍历:类似树中的层次遍历。把图的每一邻接的横向依次遍历。 深度优先遍历:顾名思义,把图的每一邻接的纵向遍历,类似树的前序遍历。