node

数据结构和算法 – 8.链表

。_饼干妹妹 提交于 2019-12-26 21:58:06
8.1.数组存在的问题 在处理列表的时候数组是常用的数据结构。数组可以对所存储的数据项提供快速地存取访问,而且它很易于进行循环遍历操作。当然,数组已经是语言的一部分了,用户不需要使用额外的内存,也不需要花费因使用用户自定义的数据结构所需的处理时间。 然而正如所见,数组不是一种最佳的数据结构。在无序数组中查找一个数据项是很慢的,这是因为在找到要查找的元素之前需要尽可能地访问到数组内的每一个元素。有序(排序)数组对查找而言会更加高效一些,但是插入和删除操作还是很慢的,因为需要向前或向后移动元素来为插入留出空间,或者为删除移除空间。更别提在有序数组内还需要为插入元素查找到合适的位置了。 8.2.定义 链表是被称为节点的类对象的群集。每一个节点通过一个引用链接到列表内的后继节点上。节点包括存储数据的字段和节点引用的字段。到另外一个节点的引用被称为是链接。 数组:元素是通过位置(索引)进行引用 链表:元素是通过它们与数组其他元素的关系进行引用 大家会说“ Bread”跟在“ Milk”的后面,而不会说“ Bread”是在第二个位置上。遍历链表是从链表的起始节点一直到末尾节点。 还需要注意的一点就是对链表结尾的标记是通过指向空( null)值实现的。既然是在内存中处理类对象,所以就用空( null)对象来表示列表的末尾。 在许多链表的实现中通常会包含一个被称为“头节点

学习数据结构Day4

微笑、不失礼 提交于 2019-12-26 20:29:42
链表 之前看过了动态数组,栈和队列,虽然我们把第一个叫做动态数组,但是,他们的底层实质上还是静态数组。靠 resize来实现动态数组。而链表是真正的数据结构 链表需要一个节点。 数据存储在链表中 相当于是一串火车,将数据放在车厢中,两个车厢之间还需要一个个节点来相互串联。 优点:实现了真正的动态。 缺点:无法进行随机访问 public class LinkedList<E> { private class Node { public E e; public Node next; public Node(E e) { this(e, null); } public Node(E e, Node next) { this.e = e; this.next = next; } public Node() { this(null, null); } @Override public String toString() { return e.toString(); } } private Node head; private int size; public LinkedList(Node head, int size) { head = null; this.size = 0; } //获取链表中的元素个数 public int getSize() { return size; } /

node express 设置重定向

北城以北 提交于 2019-12-26 20:15:33
var express = require('express'); var app = express(); app.get('/',function(req,res){ res.redirect('/admin'); }); app.get('/admin',function(req,res){ res.send('欢迎管理员'); }); app.listen(3000); 当我们访问: http://localhost:3000/ 时将自动调整到 http://localhost:3000/admin 如果需要详细设置,可通过res.hostname来进行判断: http://localhost 的host为localhost 来源: https://www.cnblogs.com/xulei1992/p/12104130.html

Elasticsearch 5.6.5 安装教程

我的梦境 提交于 2019-12-26 19:05:06
下载地址 https://www.elastic.co/downloads/past-releases/elasticsearch-5-6-5 安装环境 centos6.5 , jdk1.8 一:解压 [root@localhost programs]# tar zxvf elasticsearch-5.6.5.tar.gz 二:创建ES用户和组(创建elsearch用户组及elsearch用户) 因为使用root用户执行ES程序,将会出现错误;所以这里需要创建单独的用户去执行ES 文件。 [root@localhost programs]# groupadd elsearch ##添加用户组 [root@localhost programs]# useradd elsearch -g elsearch ##添加用户到用户组 [root@localhost programs]# chown -R elsearch:elsearch elasticsearch-5.6.5 ##更改该文件夹下所属的用户组的权限 三:创建ES数据文件和日志文件 直接在root用户根目录一下创建 [root@localhost data]# mkdir /data 更改权限 [root@localhost data]# chown -R elsearch:elsearch /data/ 切换用户

一天一道算法题(3)---将单链表的每k个节点之间逆序

时光怂恿深爱的人放手 提交于 2019-12-26 17:20:48
题目 给定一个单链表的头节点head,实现一个调整单链表的函数,使得每k个节点之间逆序,如果最后不够k个节点一组,则不调整最后几个节点。 例如: 链表:1->2->3->4->5->6->7->8->null,k=3 调整后:3->2->1->6->5->4->7->8->null 分析 方法一:使用栈结构,原链表遍历每个元素压入栈,一旦栈的大小等于k,则依次出栈,并且要使之后逆序后的子串连接上遍历到当前位置的节点,如果最后入栈的子串长度不够k,则不需要出栈,也不用调整。 如图: 方法二:不使用栈结构,直接在原表中直接调整 每次遍历到第k个元素时,直接进行调整。 代码 public Node reverseKNode2(Node head, int K) { if (K < 2) //如果k小于2则无需调整直接返回 return head; Node cur = head; Node pre = null; Node start = null; Node next = null; int count = 1; while (cur != null) { next = cur.next; if (count == K) { //pre==null意味着是第一次进行逆序,以1,2,3,4,5为例, //第一次的时候start等于1,head等于3,这就是新的head //后面pre就是

字节跳动笔试题-链表

若如初见. 提交于 2019-12-26 17:20:37
# 题目 这其实是一道变形的链表反转题,大致描述如下给定一个单链表的头节点 head,实现一个调整单链表的函数,使得每K个节点之间为一组进行逆序,并且从链表的尾部开始组起,头部剩余节点数量不够一组的不需要逆序。(不能使用队列或者栈作为辅助) 例如: 链表:1->2->3->4->5->6->7->8->null, K = 3。那么 6->7->8,3->4->5,1->2各位一组。调整后:1->2->5->4->3->8->7->6->null。其中 1,2不调整,因为不够一组。 # 解答 这道题的难点在于,是从链表的尾部开始组起的,而不是从链表的头部,如果是头部的话,那我们还是比较容易做的,因为你可以遍历链表,每遍历 k 个就拆分为一组来逆序。但是从尾部的话就不一样了,因为是单链表,不能往后遍历组起。不过这道题肯定是用递归比较好做 先做一道类似的反转题 在做这道题之前,我们不仿先来看看如果从头部开始组起的话,应该怎么做呢?例如:链表:1->2->3->4->5->6->7->8->null, K = 3。调整后:3->2->1->6->5->4->7->8->null。其中 7,8不调整,因为不够一组。 这道题我们可以用递归来实现,假设方法reverseKNode()的功能是将单链表的每K个节点之间逆序(从头部开始组起的哦);reverse()方法的功能是将一个单链表逆序

Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime (72)

╄→гoц情女王★ 提交于 2019-12-26 17:13:12
node sass不支持当前环境,所以可以直接删掉原来不支持本机的node sass,再重新安装支持的就行了 删除: cnpm uninstall --save node-sass / npm uninstall --save node-sass 安装: cnpm install --save node-sass / npm install --save node-sass 来源: https://www.cnblogs.com/cngsl/p/12102774.html

Collection常用子类源码阅读-List子类篇:LinkedList

左心房为你撑大大i 提交于 2019-12-26 17:11:41
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 类图关系: LinkedList底层存储数据结构: private static class Node<E> { //当前元素存储的值 E item; //当前元素的前一个元素 Node<E> next; //当前元素的下一个元素 Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; } } LinkedList的属性变量: //长度 transient int size = 0; //第一个元素 transient Node<E> first; //最后一个元素 transient Node<E> last; 一、构造方法: LinkedList的构造方法,除了一个无参构造方法,还有一个以Collection 实例为入参的构造方法,内部调用了allAll(Collection实例)方法,后面再细说吧。看过LinkedList的底层数据结构和属性变量之后,在这里需要细说一下LinkedList的结构: 一个Node节点对象,它的next属性引用指向下一个节点,prev属性引用指向上一个节点,因此节点与节点之间形成一个链表的结构

Java并发编程之CountDownLatch源码解析

百般思念 提交于 2019-12-26 16:29:21
一、导语 最近在学习并发编程原理,所以准备整理一下自己学到的知识,先写一篇CountDownLatch的源码分析,之后希望可以慢慢写完整个并发编程。 二、什么是CountDownLatch CountDownLatch是java的JUC并发包里的一个工具类,可以理解为一个倒计时器,主要是用来控制多个线程之间的通信。 比如有一个主线程A,它要等待其他4个子线程执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。 三、简单使用 public static void main(String[] args){ System.out.println("主线程和他的两个小兄弟约好去吃火锅"); System.out.println("主线程进入了饭店"); System.out.println("主线程想要开始动筷子吃饭"); //new一个计数器,初始值为2,当计数器为0时,主线程开始执行 CountDownLatch latch = new CountDownLatch(2); new Thread(){ public void run() { try { System.out.println("子线程1——小兄弟A 正在到饭店的路上"); Thread.sleep(3000); System.out.println("子线程1——小兄弟A 到饭店了"); /

HashMap源码记录1|火影凡酷

☆樱花仙子☆ 提交于 2019-12-26 12:07:58
前言:由于笔者所在的公司用的是jdk1.8,故该源码是针对1.8分析的。 首先:我们看一张长的很丑的HashMap的结构图: 再看看几个核心的常量: 复制代码 static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // 默认初始化容器大小,当自己指定容器大小时,必须为2的幂次方 static final int MAXIMUM_CAPACITY = 1 << 30; //容器的最大容量值 static final float DEFAULT_LOAD_FACTOR = 0.75f; //加载因子 static final int TREEIFY_THRESHOLD = 8; //把桶中链表转换为红黑树的阈值 static final int UNTREEIFY_THRESHOLD = 6; //把红黑树转换成链表的阈值 static final int MIN_TREEIFY_CAPACITY = 64; //最小的表容量使桶被树化,当表的容量小于该值时,先扩容解决hash冲突而不是树化 复制代码 putVal()方法: 复制代码 1 /** 2 * 实现Map.put和相关方法 3 * 4 * @param hash 根据key计算出来的hash值 5 * @param key 键 6 * @param value 值 7 *