前言
- 本文参加了由公众号@若川视野 发起的每周源码共读活动,点击了解详情一起参与。
- 第32期 | yocto-queue 队列 链表
queue是什么
官方的推荐词是如果您在大数组上执行大量数组push和数组shift,则应使用此软件包,因为数组shift的线性时间复杂度为o(n)而队列的dequeue()具有恒定的时间复杂性o(1)
为什么说shift的时间复杂度为o(n),看一下shift的实现就知道了
Array.prototype._shift=function(){//在数组的原型链上自定义——shift方法
var start=this[0]; //存储数组中第一个元素
this[0]=null;//然后把数组中的第一个元素释放
for(var i=0;i<this.length;i++){//数组元素做一个循环遍历
this[i]=this[i+1];//数组中,元素的前一个元素跟后一个元素交换位置
}
this.length=this.length-1;//去除数组的最后一位元素
return start;//返回数组中的第一个元素
}
源码下载
git clone https://github.com/sindresorhus/yocto-queue.git
cd yocto-queue
npm install
源码调试
入口文件index
从源码中可以发现yocto-queue采用链表存储
export default class Queue {
// 定义头部、尾部、节点数等私有变量
#head;
#tail;
#size;
// 构造器,先清空数据
constructor() {
this.clear();
}
// ...删减代码稍候详细分析
enqueue(value)
dequeue()
clear()
// 获取节点数
get size() {
return this.#size;
}
* [Symbol.iterator]()
}