node

数据结构 树(下)

独自空忆成欢 提交于 2019-12-08 05:02:33
数据结构 树(下) 一、概述    AVL树、伸展树、红黑树搜索树算法保证最坏情况或者一系列操作情况下,搜索、插入和删除的操作的时间复杂度是 O(logn) 。本文 主要内容包含:平衡搜索树中的AVL树、伸展树、(2,4)树、红黑树 和(a,b)树、B树等实际运用的树数据结构。 二叉搜索树的删除 二、AVL树 1、基本知识 1、AVL树是维持对数 O(logn) 的高度的特殊二叉搜索树。“高度”指根节点到叶子节点最长路径上的节点的数量。“None”的孩子的高度是0,叶子节点的高度是1,父节点是叶子节点的高度加1 2、AVL树具有 高度平衡属性:对于树T的每个位置P,P的孩子的高度最多相差 1。AVL树子树也是一颗AVL树! 3、一个高度为h(h≥3)的拥有最少节点的AVL树,必须有两颗子树:一颗高度 h-1,另一颗高度为 h-2:n(h)=1+n(h-1)+n(h-2) h≥3 (n(1)=1、n(2)=2) 4、AVL树的高度h和节点总数n的关系: h < 2log n +2 5、AVL树平衡因子是指位置p的两颗子树高度差 (左树减右树/右树减左树) ,平衡因子 的绝对值 不大于1。 2、更新操作 1、插入,AVL树在叶子节点产生一个新的节点插入新节点p,导致p的祖先节点不满足高度平衡属性,通过trinode重组,两次“旋转”重建树T,使其满足AVL树的高度平衡属性 2、删除

数据结构 树(上)

不打扰是莪最后的温柔 提交于 2019-12-08 05:02:32
数据结构 树(上) 一、概述   主要内容包含树的基本概念、二叉树(平衡二叉树、完全二叉树、满二叉树)、搜索树(二叉搜索树、平衡搜索树、AVL树、伸展树、(2,4)树、红黑树)、(a,b)树、B树等实际运用的树数据结构 二、基本知识(树的定义和属性) 1、树(非线性数据结构)运用于一些算法实现的效率会比线性数据结构(基于数组的列表和链表)快,广泛运用于文件系统目录结构、图形用户界面、MySQL数据库索引、网站、路由协议和其他计算机系统中 2、树T定义为存储一系列元素的有限节点集合,这些节点具有 parent-children 关系且满足属性:一、如果树T不为空,则它一定具有一个称为根节点 r 的特殊节点,并且该节点没有父节点;二、每个非根节点 v 都具有唯一的父节点 w ,每个具有父节点 w 的节点都是节点 w 的一个孩子 3、一个没有孩子的节点 v 称为外部节点或者叶子节点,一个有一个或多个孩子的节点 v 称为内部节点 4、树的边:一对具有父子关系的节点(u,v);树的路径:一系列节点,这些节点中任意两个连续的节点都具有父子关系 5、节点P的祖先:从根节点到该节点P所经路径上的所有节点;节点P的子孙:以该节点P为根节的子树中任意一个节点都是节点P的子孙 6、有序树:如果树中的每个节点的孩子节点都有特定的顺序,称为有序树。有序树:二叉树、霍夫曼树(信息编码)、B树

leetcode-初级-验证二叉搜索树

跟風遠走 提交于 2019-12-08 04:21:55
题意:判断一棵树是否满足二叉搜索树。 二叉搜索树的特点:左子树<根节点<右子树 解题思路:中序遍历,链栈,来实现。 对于一颗二叉树,中序遍历的结果若满足递增排序就满足二叉搜索树的条件 引用自: https://blog.csdn.net/sanmao0816/article/details/45085321 /** *解题思路:中序遍历,链栈 * Definition for binary tree * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ int flag; struct Node{//创建一个链栈节点 int val; struct Node *next; }; struct Stack{//创建一个链栈 struct Node *top;//指向链栈栈顶节点 int count;//记录链栈的节点个数 }; void InitStack(struct Stack *stack){//初始化一个空栈 stack->count = 0; stack->top = NULL; } void PushStack(struct Stack *stack,int val){//压栈 struct Node *node; node = (struct

node 操作文件流 fs 同步与异步 流式文件的写入与读取

a 夏天 提交于 2019-12-08 02:14:32
fs fs ( File System ) 文件系统 在node中通过fs模块来和系统中的文件进行交互 通过fs模块可以对磁盘中的文件做各种增删改查的操作 写入文件 1.同步写入 2.异步写入 3.简单写入 4.流式写入 读取文件 在fs模块中所有的方法都有两个版本 不带sync的,异步方法 带sync的,同步方法 1、同步写入 **1.打开要写入的文件** fs.openSync(path, flags[, mode]) 该方法用来打开一个文件 参数: path:路径,要打开文件的路径 flags:操作的类型,要对文件做什么操作 需要字符串作为参数 "w" 写 "r" 读 "a" 追加 mode:可选参数,一般不传,用来设置文件的权限 返回值: fd 文件的描述符 2.写入并保存 fs.writeSync(fd, string[, position[, encoding]]) 该方法用于向文件中写入内容 参数: fd: 文件的描述符,需要指定要写入文件的描述符 string: 要写入的内容 position: 开始写入的位置 encoding: 写入内容的字符编码,默认utf-8 3.关闭文件 fs.closeSync(fd):: 该方法用来关闭文件 参数: fd 文件的描述符 实例 //引入fs模块 var fs=require('fs'); var fd=fs

AQS系列(一)- ReentrantLock的加锁

落爺英雄遲暮 提交于 2019-12-07 22:58:27
前言 AQS即AbstractQueuedSynchronizer,是JUC包中的一个核心抽象类,JUC包中的绝大多数功能都是直接或间接通过它来实现的。本文是AQS系列的第一篇,后面会持续更新多篇,争取将JUC包中AQS相关的常用功能讲清楚,一方面巩固自己的知识体系,一方面亦可与各位园友互相学习。寒冷的冬天,要用技术来温暖自己。 一、AQS与ReentrantLock的关系 先奉上一张自制的丑陋类图 从下往上看,ReentrantLock类内部有两个静态内部类FairSync和NonfairSync,分别代表了公平锁和非公平锁(注意ReentrantLock实现的锁是可重入排它锁)。这两个静态内部类又共同继承了ReentrantLock的一个内部静态抽象类Sync,此抽象类继承AQS。 类的关系搞清楚了,我们下面一起看一下源码。 二、源码解读 ReentrantLock的默认构造方法创建的是非公平锁,也可以通过传入true来指定生成公平锁。 下面我们以公平锁的加锁过程为例,进行解读源码 。在解读源码之前需要先明确一下AQS中的state属性,它是int类型, state=0表示当前lock没有被占用,state=1表示被占用 ,如果是重入状态,则重入了几次state就是几。 1 public class JucLockDemo1 { 2 public static void

node.js开发环境搭建

大城市里の小女人 提交于 2019-12-07 21:34:28
前言: 从事C/C++工作2年有余,由于公司物联网平台开发的服务端功能模块需要用Node.js开发,小公司无奈人手不够,我也加入了Node.js开发中,抱着学习新东西的态度开启在Node.js中的前行。进入正题,在家使用centos 搭建Node,js的开发环境。 操作系统: centos 6.5 32位 资源: 1) node-v5.1.0-linux-x86.tar.gz url: https://nodejs.org/dist/v5.1.0/node-v5.1.0-linux-x86.tar.gz 2) node-v5.1.0.tar.gz url: https://nodejs.org/dist/v5.1.0/node-v5.1.0.tar.gz 3) WebStorm-10.0.4.tar.gz url: http://download-cf.jetbrains.com/webstorm/WebStorm-10.0.4.tar.gz 安装Node : 1) 解压node-v5.1.0-linux-x86.tar.gz #tar -zxvf node-v5.1.0-linux-x86.tar.gz -C 目标路径 解压后,将解压后的目录下的bin文件路径添加到环境变量中,即可使用node和npm 安装WebStorm 10.0.4: 1)解压WebStorm-10.0.4

node后端使用jwt实现跨域认证--生成token、验证token是否无效和过期

一笑奈何 提交于 2019-12-07 20:05:44
JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案 引入jwt var jwt = require('jsonwebtoken'); 生成token 在登录时,如果用户名和密码正确,则使用jwt生成token,返回给前端 let { username, password } = req.body; . . . //jwt生成加密token,username是公文,密钥是“secret”,1小时后过期 token = jwt.sign({ username }, "secret", { expiresIn: 60 * 60 * 1 }); . . . res.json({ code: 0, msg: '登录成功', token: token, userName: username }); 解析token 在所有需要登录验证的请求中,获取请求头中的token,使用jwt解析此token let token = req.headers.authorization; if (token) { jwt.verify(token, 'secret', (err, decoded) => { if (err) { switch (err.name) { case 'JsonWebTokenError': res.status(403).send({ code: -1,

在Linux(ubuntu server)上面安装NodeJS的正确方法

扶醉桌前 提交于 2019-12-07 19:10:13
为了保持一致,这里也列举三个方法 第一个方法:通过官网下载安装 https://nodejs.org/en/download/ 这种方式的问题是我们需要自己去找网页,找到链接,然后下载 第二个方法:使用apt工具进行安装 默认情况下,在apt的源中只有比较老的版本(注意,需要先apt-get update) 例如,如果运行apt-get install nodejs,安装完之后,需要用Nodejs -v查看版本,(请注意,不是node -v) 这显然不是很让人高兴的一个事情(版本老,而且使用的方式都不一样) 令人疑惑的是另外一个包,nodejs-legacy,安装完后,版本号也是0.10.25,但是运行方式则是node,而不是nodejs 而nodejs-dev,使用的方式跟Nodejs是一样的,版本也是0.10.25 所以关键的问题在于,apt的源里面没有最新的nodejs 这个package,那么怎么办呢? https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions 这里提供了解决方法,node自己提供了源 参考:https://github.com/nodesource/distributions 如果要安装5.x版本,那么可以运行下面两行命令 curl

安装node版本管理工具之NVM

隐身守侯 提交于 2019-12-07 19:10:00
nvm是个啥?nvm是一个可以让你在同一台机器上安装和切换不同版本node的工具 linux系统的github地址: 点我 如果你是windows系统,直接下载安装就好了,附 windows-nvm的github地址 点我 windows-nvm的下载地址 点我去下载 1. 开始安装(Linux系统下) 可以通过curl或者wget进行安装,命令如下 curl方式 curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.1/install.sh | bash wget方式 wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.1/install.sh | bash 如果你系统没有安装git的话,请先安装git,安装命令请参考下面 ubuntu系统 sudo apt-get install git centos sudo yum install git 2. 可能遇到的问题 安装完后,如果是用xshell连远程主机的话,先重连一次,不然会发现提示找不到nvm命令 可能出现依旧提示找不到nvm命令,那么请使用source命令,如下 source ~/.bashrc 如果是zsh的话,请用 source ~/.zshrc

浅谈:node快速搭建个人博客

两盒软妹~` 提交于 2019-12-07 16:34:53
接触web开发不知不觉也有one year了,虽然每天的工作繁重,但是一直有个信念:做个属于自己的网站!!比较容易入手的项目当然属于个人博客了!在这里分享一下我的心得: 1.博客模板--ghost 提到博客,一般的人都会想到WordPress(php的框架)。如果没有php语言基础的话,还是放弃吧。这里我选用了ghost:一款开源的node个人博客平台(体积小,基本功能都有,可以选择不同的主题,扩展性好);可以去ghost中文网 http://www.ghostchina.com/ 最新的版本是ghost 0.7.4,支持最新的node的版本! ghost的文档与api很容易理解,静下心来看看就懂了!最好下载中文集成依赖包的那个版本,毕竟npm下载的依赖包都在国外服务器上,很有可能下载不了! ghost连数据库都有,自带的数据库sqlite( 一款轻型的数据库 ),如果想长期维护数据的话还是换成mysql,ghost里有相应的配置,只需要改一下连接就行! 图片是存储在/content/images/下的,当然也可以借助upyun服务,upyun的图片存储不错的,推荐试试,难道我会说upyun免费送了我one year使用权! 2.服务器--vps 买过域名的人都知道,在国内如果想正常使用;域名都需要经过备案的,十分麻烦!而且国内的服务器的费用也不低,相对于自己的小项目