自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 数据结构-教你手写Hash表

哈希表(Hash)又称“散列表”,在JavaScript中对象字面量的实现就是基于哈希表,哈希表是一种算法简单、性能优越的一种查找算法。以JavaScript对象字面量为例:比如: 'name':'chn' 这一个键值对属性想插入对象中,首先需要根据键name计算出其对应的一个“编号”,而这个编号就是后面需要查找的地址编号,所以这个编号如何获取就比较的重要;当然有很多种办法,比如比较常用的根据字符的ASCII码进行相加得到一个编号;例如 'name' ASCII码相加就是:110+97+109+101=

2021-08-09 00:15:31 1085 1

原创 JavaScript数据结构之双向链表,C语言也适用!

双向链表又称“双向循环链表”,相较于单链表,双向链表增加了一个指向前面一个结点的指针,链表内的结点不会存在NULL结点,文章有点长,但是干货满满,希望你能看完。目录一、初识双向链表二、双向链表初始化三、添加结点3.1头插法3.2尾插法3.3指定位置插入四、删除结点4.1删除指定位置结点4.2删除整表五、获取结点附:完整源码:一、初识双向链表在双向链表中,每个结点都有两个指针域(prior和next)和一个数据域(data),第一个结点称”头结...

2021-07-27 13:36:45 448

原创 typescript 高级类型体操

类型体操练习

2022-09-12 20:12:29 735 1

原创 TypeScript 实现一个简易版Promise

快速上手Promise

2022-07-07 23:09:03 829

原创 TypeScript 混入

Typescript实现简易版混入模式感兴趣的小伙伴欢迎学习、讨论、共同进步!!!

2022-05-23 15:13:11 372

原创 python 多继承super解析

原文链接:

2021-09-03 18:02:45 451

原创 python 模拟检测函数形参类型

python3 新增了函数注解,大致用法就是 def func(a:int,b:str) -> str ,用:来表示函数形参的类型,但是目前为止这个注解在python解释器中不会起到任何作用,实参类型不会因为形参注解类型而发生任何异常,所以我突发奇想,结合python的装饰器和inspect 模块一起做一个简单的类型检测(可能存在一点bug,但是我觉得实现过程值得被记录)在以下的代码中,需要使用到inspect模块里面的signature、Parameter#异常检测类,对于类型不匹配的抛出

2021-08-30 00:01:20 175

原创 python 元组替代字典

大家应该都知道python字典背后的实现是依靠散列表的,散列表可真是个好东西,可以以极快的速度获取内存上的数据,但是任何强大的东西背后都是有做出牺牲的,比如散列表就是一个典型的以空间换时间的数据结构,散列表存储并不会将数组存满,而是会留存大概三分之一左右的内存不存任何数据,这就导致了我们在实际开发中如果遇到了要存储千万上亿级别的数据的时候,python的字典就会造成大量的内存浪费(如果你的设备内存足够大当我没说);所以我们更希望在不造成大面积空间浪费的情况下而又能快速拿到数据,元组的重要性就体现出来了,

2021-08-25 11:42:15 167

原创 二叉排序树,看完你就会了

二叉排序树又称“二叉搜索树”,是一种左子树比根结点小,右子树比根结点大的特殊二叉树的形式;因为其排序的特殊性,所以在查找某个结点的时候可以遵循某种规律,因此其查找算法相较普通的二叉树效率高的不止一点点;而实际开发中使用了二叉树这种数据结构的,大部分都是二叉排序树,因此掌握它,尤为重要!一、认识二叉排序树二叉排序树,需要左子树小于根结点,右子树大于根结点,很显然上面两图都不满足条件。来看看下面这张图,没错,他就是二叉排序树:二、初始化二叉排序树仔细观察二叉排序树的结构...

2021-08-15 00:33:33 3414 1

原创 数据结构之二叉树创建及遍历

二叉树是一种比较特殊的树型数据结构,这一次来学习一下如何递归创建二叉树,以及如何递归遍历二叉树,同时最后以前序遍历为例子,非递归遍历二叉树。要写出代码来,要心中有数,二叉树的结构相较于前面的链表、队列、栈要相对复杂,所以,在没底的时候多画图来理解。...

2021-08-12 13:36:09 420

原创 JavaScript 手动封装Set集合(包括求交并差集)

ES6的js新增了Set集合,为这门语言带来了集合数据结构,为了更深层次的理解Set集合底层封装机制,我们来手写一个Set集合。首先要知道Set集合的内置方法和属性有哪些?Set内置一个类似对象数组的一种数据结构,我们就用set数组来代替,同时还有一个size属性指向集合的总个数。其他内置方法包括:增、删、查、遍历接下来我们开始写代码:'use strict'//迭代器const mySet = function () { const wm = new WeakMap();

2021-08-06 11:37:05 363

原创 JavaScript数据结构之链表

链表是数据结构中最简单也是最常提及的一种数据结构了,不同于数组,在链表里面所有的结点数据内存都是不连续的,这就要求在访问链表的时候只能从头一个一个去访问,同时正是由于这个特性,链表可以动态分配内存空间,在性能上,链表远胜数组,这也是为什么在处理大型数据的时候,大多数都使用链表而不是数组。接下来我将介绍几种链表常用方法,概念不多介绍,直接上代码!*文章最后附源码一、初始化准备阶段function LinkList(){ this.head=null; //初始化头结点为空

2021-07-24 13:43:39 149 1

原创 JavaScript私有属性方法的三种实现过程

大家可能知道ES11已经从官方规范上实现了“私有”的概念,不管是私有属性还是私有方法都只需要在前面加上“#“即可,但是ES11版本太新,担心可能很多浏览器不能很好的支持,并不是所有用户都会使用Chrome,对吧? 所以这一次我们从ES5开始到ES6实现私有化的概念一、ES5闭包'use strict'//第一种const Test=function(){ //定义私有属性 let privateAttr; function Test(id){ privateA

2021-07-23 21:36:35 758 2

原创 JavaScript实现优先队列

首先先来阐述下什么是优先队列?普通的队列就是遵循先进先出(FIFO),不管你是谁,你来了都得往后面排队,先排队的可以先出去。在优先队列中,每个元素都拥有一个优先级属性,优先级高的排在前面,优先级低的排在后面,同样优先级高的元素可以享受优先出队,这就是优先队列。elem 6 3 2 8 1 priority(优先级) 4 2 1 5 3 普通队列顺序:6、3、2、8、1优先队列顺序:2、3、1、6、8 (数字越

2021-07-22 11:25:28 280 3

原创 JavaScript生成器实现 对象迭代和python range函数

上一篇文章我实现了使用迭代器遍历对象,本篇文章使用生成器去实现对象迭代,再使用生成器去实现一个python的range函数个人感觉使用生成器来迭代对象:代码简洁,易于理解let fn1=Symbol("2");const obj2={ name:"生成器", arr:[1,2,3], *[Symbol.iterator](){ let index=0; let arr=Object.getOwnPropertyNames(obj2); while(index<arr

2021-07-16 14:42:03 211

原创 JavaScript 迭代器实现for of遍历对象

很多时候,我个人感觉开发过程中一味的使用for in 遍历对象不太方便,使用for of就比较轻松,但是好巧不巧对象没有部署迭代器,这就很烦了。。好在ES6是可以让我们自定义迭代器的,于是我们可以在对象上部署一个迭代器,这个迭代器的功能完全由开发者决定,不一定非要暴力枚举对象上的每个键值对,开发过程中按照实际需求来。在这里简单实现一个for of枚举对象的值'use strict' //迭代器 const obj={ name:"chn", age:18, arr:[1,

2021-07-15 22:56:59 251 2

原创 JavaScript实现单例模式的三种方式

/*第一种方式: 简单的使用一个私有变量来控制是否允许本次实例化对象获得一个this地址 第一次实例化对象的时候instance为null,允许将getInstance构造的内存地址分配给该实例对象,第二次 实例化对象,由于私有变量已经被赋值为getInstance的地址,所以直接返回这个地址,由此可以让两个甚至 多个对象的地址都是完全一样的,从而实现单例对象模式。*/const test=function(){ let instance=null; //...

2021-07-09 18:41:56 524

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除