队列,FIFO(First Input First Output) 一种先进先出的数据缓存器。
(function(){ function Array_h(length){ this.array = length === undefined ? [] : new Array(length); } Array_h.prototype = { /** * 返回数组长度 * * @return {Number} length [数组长度] */ length: function() { return this.array.length; }, at: function(index) { return this.array[index]; }, set: function(index, obj) { this.array[index] = obj; }, /** * 向数组的末尾添加一个或多个元素,并返回新的长度。 * * @param {*} obj [description] * @return {Number} length [新数组的长度] */ push: function(obj) { return this.array.push(obj); }, /** * 返回数组中选定的元素 * * @param {Number} start [开始索引值] * @param {Number} end [结束索引值] * @return {Array} newArray [新的数组] */ slice: function(start, end) { return this.array = this.array.slice(start, end); }, concat: function(array) { this.array = this.array.concat(array); }, remove: function(index, count) { count = count === undefined ? 1 : count; this.array.splice(index, count); }, join: function(separator) { return this.array.join(separator); }, clear: function() { this.array.length = 0; } } /** * 先进先出队列 (First Input First Output) * * 一种先进先出的数据缓存器 */ function Queue(){ this._array_h = new Array_h(); }; Queue.prototype = { _index: 0, /** * 排队 * * @param {Object} obj [description] * @return {[type]} [description] */ push: function(obj) { this._array_h.push(obj); }, /** * 出队 * * @return {Object} [description] */ pop: function() { var ret = null; if (this._array_h.length()) { ret = this._array_h.at(this._index); if (++this._index * 2 >= this._array_h.length()) { this._array_h.slice(this._index); this._index = 0; } } return ret; }, /** * 返回队列中头部(即最新添加的)的动态对象 * * @return {Object} [description] */ head: function() { var ret = null, len = this._array_h.length(); if (len) { ret = this._array_h.at(len - 1); } return ret; }, /** * 返回队列中尾部(即最早添加的)的动态对象 * * @return {Object} [description] */ tail: function(){ var ret = null, len = this._array_h.length(); if (len) { ret = this._array_h.at(this._index); } return ret; }, /** * 返回数据队列长度 * * @return {Number} [description] */ length: function() { return this._array_h.length() - this._index; }, /** * 队列是否为空 * * @return {Boolean} [description] */ empty: function() { return (this._array_h.length() === 0); }, clear: function(){ this._array_h.clear(); } }; var queue = new Queue(); queue.push('one'); queue.push('two'); queue.push('three'); console.log(queue.head());// three console.log(queue.tail());// one console.log(queue.length());// 3 queue.pop(); console.log(queue.head());// three console.log(queue.tail());// two console.log(queue.length());// 2 queue.clear()//清空队列数据 console.log(queue.head());// null console.log(queue.tail());// null console.log(queue.length());// -1 })();
这篇文章目前没有评论