队列(Queue)是一种先进先出(First-In-First-Out, FIFO)的数据结构,与栈不一样的是,它操做的元素是在两端,并且进行的是不同的操做。向队列的队尾加入一个元素叫作入队列(enQueue),向队列的队首删除一个元素叫作出队列(delQueue).javascript
Queue --- length,属性,队列长度 dataStore,属性,存储数据 enQueue,方法,入队列 delQueue,方法,出队列 empty,方法,清空队列 front,方法,得到队首元素 rear,方法,得到队尾元素 print,方法,打印队列
// 构造函数 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] + '\n'); } }
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!java