摘要:队列是一种先进先出的数据结构,与栈不同的是,它操作的元素是在两端,而且进行的是不一样的操作。
队列(Queue)是一种先进先出(First-In-First-Out, FIFO)的数据结构,与栈不同的是,它操作的元素是在两端,而且进行的是不一样的操作。向队列的队尾加入一个元素叫做入队列(enQueue),向队列的队首删除一个元素叫做出队列(delQueue).
ADTQueue --- length,属性,队列长度 dataStore,属性,存储数据 enQueue,方法,入队列 delQueue,方法,出队列 empty,方法,清空队列 front,方法,获得队首元素 rear,方法,获得队尾元素 print,方法,打印队列JavaScript描述
// 构造函数 function Queue () { this.length = 0; this.dataStore = []; }
// 原型核心方法 Queue.prototype = { constructor: Queue, enQueue: function (element) { // 存储元素并使队列长度加1 this.dataStore[this.length++] = element; }, delQueue: function () { var res = this.dataStore[0], //取得队首元素 i; // 当队列不为空 if (res !== undefined) { // 这里尽量避免使用js语言特性来实现 // 取出队首元素,并让队列后方元素向前移动,队列长度减一 // js数组其实已经实现了队列的方法,删除队首shift if (this.length > 1) { for (i = 0; i < this.length - 1; i++) { this.dataStore[i] = this.dataStore[i + 1]; } this.dataStore.length -= 1; } else { // 当只有一个元素时,出队列后数组为空 this.dataStore = []; } this.length -= 1; } return res; }, }
// 其他方法 empty: function () { this.dataStore.length = 0; this.length = 0; }, front: function () { return this.dataStore[0]; }, rear: function () { return this.dataStore[this.length - 1]; }, print: function () { for (var i = 0; i < this.length; i++) { console.log(this.dataStore[i] + " "); } }测试
var q = new Queue(); q.enQueue("jiavan"); q.enQueue("jiavan2"); q.enQueue("jiavan3"); q.enQueue("jiavan4"); q.print(); q.delQueue(); // jiavan q.length; // 3 q.front(); //jiavan2 q.rear();// jiavan4 q.empty(); q.dataStore; //[]
系列文章原文地址https://github.com/Jiavan/js4algs GitHub repo上有源码和更好的阅读体验,若有错误欢迎发PR,若对你有所帮助也欢迎star!
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/79333.html
摘要:我们可以使用链表这种数据结构,来删除元素的时候而不必让后面的元素向前移动。一个节点的上一个节点称为它的前驱,下一个节点即指向的节点称为它的后继节点,在简单的单向链表中,第一个节点称为头节点它没有前驱节点,最后一个节点没有后继节点为。 之前我们用数组的方式来实现了队列,是否还记得在出队列后有这样一段代码: for (i = 0; i < this.length - 1; i++) { ...
摘要:列表项目栈是一种后进先出的数据结构,我们所能操作的都是栈顶元素,删除一个栈顶元素叫做出栈或者弹栈,添加一个元素叫做入栈或者压栈首先构建我们的抽象数据类型栈顶元素位置保存数据的数组压栈出栈查看栈顶元素清空栈栈的长度输出栈元素描述模拟输出 列表项目 栈是一种后进先出(LIFO)的数据结构,我们所能操作的都是栈顶元素,删除一个栈顶元素叫做出栈或者弹栈,添加一个元素叫做入栈或者压栈. show...
摘要:使用了一个事件驱动非阻塞式的模型,使其轻量又高效。的包管理器,是全球最大的开源库生态系统。按照这个定义,之前所述的阻塞,非阻塞,多路复用信号驱动都属于同步。 系列文章 Nodejs高性能原理(上) --- 异步非阻塞事件驱动模型Nodejs高性能原理(下) --- 事件循环详解 前言 终于开始我nodejs的博客生涯了,先从基本的原理讲起.以前写过一篇浏览器执行机制的文章,和nodej...
摘要:如果没到毫秒,那么阶段就会跳过,进入阶段,先执行的回调函数。参考文档什么是浏览器的事件循环不要混淆和浏览器中的定时器详解浏览器和不同的事件循环深入理解事件循环机制篇中的执行机制 最近对Event loop比较感兴趣,所以了解了一下。但是发现整个Event loop尽管有很多篇文章,但是没有一篇可以看完就对它所有内容都了解的文章。大部分的文章都只阐述了浏览器或者Node二者之一,没有对比...
摘要:还请同学跟我多多探讨关于修改是异步还是同步的问题先来看代码上述代码的结果完全就是同步的表现,如果是异步的话,毫无疑问,第一个下的每个内容都应该是,第二个也应该是。 回 @bf 同学 本篇文章不是笔记也不是心得,而是关于一个问题的讨论,问题最初出现于https://segmentfault.com/q/1010000005630545?_ea=903562 由于 @bf 同学不方便...
阅读 2641·2019-08-30 15:52
阅读 3588·2019-08-29 17:02
阅读 1834·2019-08-29 13:00
阅读 910·2019-08-29 11:07
阅读 3227·2019-08-27 10:53
阅读 1760·2019-08-26 13:43
阅读 1003·2019-08-26 10:22
阅读 1306·2019-08-23 18:06