next

深入Lua:Table的实现

£可爱£侵袭症+ 提交于 2021-02-04 04:04:54
Table的结构 Lua和其他语言最不同的地方在于,它只有一个叫表的数据结构:这是一个数组和哈希表的混合体。神奇的地方在于只通过表,就可以实现模块,元表,环境,甚至面向对象等功能。这让我们很好奇它内部的结构到底是怎么样的。 它的结构定义在 lobject.h 中,是这样的: typedef struct Table { // 这是一个宏,为GCObject共用部分,展开后就是: // GCObject *next; lu_byte tt; lu_byte marked // 所有的GC对象都以这个开始 CommonHeader; // 和快速判断元方法有关,这里可以先略过 lu_byte flags; // 哈希部分的长度对数:1 << lsizenode 才能得到实际的size lu_byte lsizenode; // 数组部分的长度 unsigned int sizearray; // 数组部分,为TValue组成的数组 TValue * array ; // 哈希部分,为Node组成的数组,见下面Node的说明 Node *node; // lastfree指明空闲槽位 Node *lastfree; // 元表:每个Table对象都可以有独立的元表,当然默认为NULL struct Table * metatable ; // GC相关的链表,这里先略过 GCObject

头插法和尾插法建立单链表

别等时光非礼了梦想. 提交于 2021-02-02 22:57:42
https://www.cnblogs.com/Timesi/p/12430418.html //头插法建立单链表 #include <stdio.h> #include <malloc.h> typedef struct LNode{ int data; struct LNode *next; }Node,*LinkList; LinkList HeadInsert(LinkList &); //头插法建立单链表 void output(LinkList); //遍历输出 int main(void){ LinkList L; HeadInsert(L); output(L); return 0; } //头插法建立单链表 LinkList HeadInsert(LinkList &L){ L = (Node *)malloc(sizeof(Node)); L->next = NULL; int e; scanf("%d",&e); while(e != -1){ //输入-1表示结束输入 Node *s = (Node *)malloc(sizeof(Node)); s->data = e; s->next = L->next; L->next = s; scanf("%d",&e); } return L; } //遍历输出 void output(LinkList L){

2020年你不应该错过的CSS新特性

空扰寡人 提交于 2021-02-02 14:40:05
@argyleink在第四次的伦敦(LondonCSS 2020)CSS活动中分享了一个有关于CSS特性相关的话题。看了一下这个主题的PPT,里面有些新东西还是蛮有意思的。基于该PPT,我稍微整理近24个CSS方面的新特性,感兴趣的同学可以继续往下阅读。 接下来的内容我将分为: Web动效 、 Web排版 、 Web性能 、 Web可访问性 、 Web美化 和 其他 等六个部分。 下面聊的CSS新特性当中,有部分还处于实验阶段,如果您感兴趣的话,并不会影响你阅读。你也可以选择你感兴趣的部分阅读。(^_^) NO.1 伦敦CSS 2020 伦敦CSS 2020 (https://www.londoncss.dev/) 并不是一次性的活动,到我写这篇文章为止已经是第四届 (https://www.londoncss.dev/events/event4) 了,每届的话题都不同。在这次活动中主要有三个话题: @argyleink的WHAT'S NEW WITH CSS? @Stephanie Eckles的STYLE STAGE AND MODERN CSS:Style Stage堪比现代版的CSS禅意花园(CSS Zen Garden),允许任何级别的CSS从业者重新设计基于相同HTML的样式,同时提高他们地现代CSS特性的熟悉程度 @Cassie Evans的PAINTING WITH

2020 年你不应该错过的 CSS 新特性

妖精的绣舞 提交于 2021-02-02 13:59:56
@argyleink在第四次的伦敦(LondonCSS 2020)CSS活动中分享了一个有关于CSS特性相关的话题。看了一下这个主题的PPT,里面有些新东西还是蛮有意思的。基于该PPT,我稍微整理近24个CSS方面的新特性,感兴趣的同学可以继续往下阅读。 接下来的内容我将分为: Web动效 、 Web排版 、 Web性能 、 Web可访问性 、 Web美化 和 其他 等六个部分。 下面聊的CSS新特性当中,有部分还处于实验阶段,如果您感兴趣的话,并不会影响你阅读。你也可以选择你感兴趣的部分阅读。(^_^) NO.1 伦敦CSS 2020 伦敦CSS 2020 (https://www.londoncss.dev/) 并不是一次性的活动,到我写这篇文章为止已经是第四届 (https://www.londoncss.dev/events/event4) 了,每届的话题都不同。在这次活动中主要有三个话题: @argyleink的WHAT'S NEW WITH CSS? @Stephanie Eckles的STYLE STAGE AND MODERN CSS:Style Stage堪比现代版的CSS禅意花园(CSS Zen Garden),允许任何级别的CSS从业者重新设计基于相同HTML的样式,同时提高他们地现代CSS特性的熟悉程度 @Cassie Evans的PAINTING WITH

在win10环境下安装Cygwin,可以GCC编译

给你一囗甜甜゛ 提交于 2021-02-02 12:21:01
参考博客: http://www.cnblogs.com/hchacha/p/7147603.html 1. 上述网址提供了setup-x86_64.exe,用于安装 Cygwin 2. 我在安装时,选择了如下网址去下载mirros: 3. 现在的cywin默认是最小化安装,但并不包括Gcc,如果要使用gcc,g++,make,gdb工具,是需要选择这些包的 gcc-core、gcc-g++、make、gdb、binutils,五个包都在Category下的Devel下 。 4. 后来,我又安装了 git vim openssh 3个组件,安装流程如下: 点开setup-x86.exe,一路Next:选择在线安装 -> 填写根路径cygwin -> 填写下载的临时安装文件保存路径cygwinsetup -> 选择镜像站点(选国内163或阿里云) ->点击列表ALL 然后通过search查找,将旁边的Default将其切换到Install状态 ->继续一路Next完成安装 来源: oschina 链接: https://my.oschina.net/u/4311561/blog/3552417

CSS基础学习笔记

╄→гoц情女王★ 提交于 2021-02-02 11:06:20
一、导入样式表: 当想要将样式运用到整个网站而不是单张页面时,管理样式的更好的方法是将它们从网页中分离出来,放到称作样式表的独立文件中,以便在需要时导入。 (1).使用CSS的@immport指令导入样式表: < style > @import url(;styles.css'); </ style > (2).从HTML内部导入样式表: < link rel ='stylesheet' type ='text/css' href ='styles.cdd' /> (3).嵌入样式: < div style ='font-style:italic; color:blue;' > Hello there </ div > 二、CSS规则: CSS规则是指一条或一系列语句,用以告诉网页浏览器怎样在页面上渲染某个或某些元素。CSS规则中的每条语句以选择器开始,指定施加规则的元素。规则中所有要修改的属性必须在选择器后面的"{"和"}"内出现。 例如,要将一号标题改为红色并放大24%: h1 { font-size : 240% ; color : red ; } 三、CSS选择器 用于在页面上访问一个或多个元素的方法称为选择,在CSS规则中的这一部分被称为选择器。 (1) 类型选择器:类型选择器为HTML元素指定 类型,像<p>、<div>等: p { text-align :

ES5-ES6-ES7_Symbol数据类型

百般思念 提交于 2021-02-02 03:42:51
Symbol数据类型简介 ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,前六种是:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。 Symbol 值通过Symbol函数生成。这就是说,对象的属性名现在可以有两种类型,一种是原来就有的字符串,另一种就是新增的 Symbol 类型。 凡是属性名属于 Symbol 类型,就都是独一无二的,可以保证不会与其他属性名产生冲突。 Symbol函数前不能使用new命令,否则会报错。这是因为生成的 Symbol 是一个原始类型的值,不是对象。 也就是说,由于 Symbol 值不是对象,所以不能添加属性。基本上,它是一种类似于字符串的数据类型 let s = Symbol(); // 变量s就是一个独一无二的值。typeof运算符的结果,表明变量s是 Symbol 数据类型,而不是字符串之类的其他类型 console.log( typeof s); // symbol console.log(s); // Symbol() // Symbol函数可以接受一个字符串作为参数,表示对 Symbol 实例的描述, // 主要是为了在控制台显示,或者转为字符串时,比较容易区分 let s1 = Symbol(

CCNP(BSCI)实验:配置BGP的路由过滤和默认路由

跟風遠走 提交于 2021-02-02 01:47:39
第一步:预配置 R1(config)#int lo0 R1(config-if)#ip add 1.1.1.1 255.255.255.0 R1(config-if)#int s2/1 R1(config-if)#ip add 12.0.0.1 255.255.255.0 R1(config-if)#no sh R2(config)#int lo0 R2(config-if)#ip add 2.2.2.2 255.255.255.0 R2(config-if)#int s2/1 R2(config-if)#ip add 12.0.0.2 255.255.255.0 R2(config-if)#no sh R2(config-if)#int s2/2 R2(config-if)#ip add 23.0.0.2 255.255.255.0 R2(config-if)#no sh R3(config)#int lo0 R3(config-if)#ip add 3.3.3.3 255.255.255.0 R3(config-if)#int s2/1 R3(config-if)#ip add 23.0.0.3 255.255.255.0 R3(config-if)#no sh R3(config-if)#int s2/2 R3(config-if)#ip add 34.0.0.3 255

Redis底层数据类型

半腔热情 提交于 2021-02-02 00:59:10
Redis主要数据结构: 简单动态字符串(SDS)、双端链表、字典、跳跃表、整数集合、压缩列表和快速列表 ; 一、简单动态字符串(SDS): Redis没有直接使用C语言中的传统的字节数组保存字符串,而是自行构建了简单动态字符串(SDS),C字符串只是作为简单动态字符串(SDS)的字面量,用于在无需对字符串值进行修改的地方。 结构: struct __attribute__ ((__packed__)) sdshdr8 { uint8_t len; /* 表示字符串真正的长度,不包含空终止字符 */ uint8_t alloc; /* 表示字符串的最大容量,不包含Header和最后的空终止字符 */ unsigned char flags; /*表示header的类型 */ char buf[]; }; sds结构一共有五种Header定义,其目的是为了满足不同长度的字符串可以使用不同大小的Header,从而节省内存。 通过使用SDS代替C字符串的优点: 将获取字符串长度所需的复杂度降低到O(1); 杜绝缓冲区溢出的情况;   当 SDS需要修改时,首先会检查 SDS的空间是否满足修改所需的要求,如果不满足会自动进行空间扩容。 sds规定:如果扩展后的字符串总长度小于 1M则新字符串长度为扩展后的两倍;如果大于 1M,则新的总长度为扩展后的总长度加上 1M;这样做的目的是减少

LeetCode 841. 钥匙和房间 | Python

 ̄綄美尐妖づ 提交于 2021-02-01 11:09:10
841. 钥匙和房间 题目来源:力扣(LeetCode) https://leetcode-cn.com/problems/keys-and-rooms 题目 有 N 个房间,开始时你位于 0 号房间。每个房间有不同的号码:0,1,2,...,N-1,并且房间里可能有一些钥匙能使你进入下一个房间。 在形式上,对于每个房间 i 都有一个钥匙列表 rooms[i],每个钥匙 rooms[i][j] 由 [0,1,...,N-1] 中的一个整数表示,其中 N = rooms.length。 钥匙 rooms[i][j] = v 可以打开编号为 v 的房间。 最初,除 0 号房间外的其余所有房间都被锁住。 你可以自由地在房间之间来回走动。 如果能进入每个房间返回 true,否则返回 false。 示例 1: 输入: [[1],[2],[3],[]] 输出: true 解释: 我们从 0 号房间开始,拿到钥匙 1。 之后我们去 1 号房间,拿到钥匙 2。 然后我们去 2 号房间,拿到钥匙 3。 最后我们去了 3 号房间。 由于我们能够进入每个房间,我们返回 true。 示例 2: 输入:[[1,3],[3,0,1],[2],[0]] 输出:false 解释:我们不能进入 2 号房间。 提示: 1 <= rooms.length <= 1000 0 <= rooms[i].length <=