像棧一樣,隊列也是一種線性表。它允許在表的一端插入數據,在另一端刪除元素。插入元素的這一端稱之爲隊尾。刪除元素的這一端我們稱之爲隊首。隊列的結構如下圖所示。
隊列的特性:
- 在隊尾插入元素,在隊首刪除元素。
- FIFO(先進先出),和食堂排隊打飯一樣。
es5 實現
function Queue(){
var temps = [];
//隊列的插入
this.insert = function(e){
if(e){
temps.push(e);
}
}
//隊列的刪除
this.remove = function(){
return temps.shift();
}
//獲取隊列的長度
this.getSize = function(){
return temps.length;
}
//清除隊列
this.clear = function(){
temps = [];
}
//獲取隊列的第一個元素
this.getFront = function(){
if(temps.length>0){
return temps[0]
}else{
return null;
}
}
//判斷隊列是否爲空
this.isEmpty = function(){
return temps.length == 0;
}
// 打印隊列內的所有元素
this.print = function () {
console.log(temps.toString());
};
}
測試:
//====================================測試=============================
let queue = new Queue();
console.log(queue.isEmpty()); // true
console.log("向隊列插入數據:郭,張,劉");
//向隊列插入數據
queue.insert('郭');
queue.insert('張');
queue.insert('劉');
console.log("當前隊列元素:");
queue.print();
console.log("當前隊列長度:");
console.log(queue.getSize()); // 3
console.log("當前隊首元素:");
console.log(queue.getFront());
console.log("執行隊列出隊操作");
console.log(queue.remove());
console.log("當前隊列元素:");
queue.print();
console.log("清空隊列");
queue.clear();
console.log(queue.getSize());
結果:
es6實現
let Queue = (function () {
const items = new WeakMap();
class Queue {
constructor() {
items.set(this, []);
}
enqueue (element) {
let q = items.get(this);
if (element instanceof Array) items.set(this, q.concat(element));
else q.push(element);
};
dequeue () {
let q = items.get(this);
return q.shift();
};
front () {
return items.get(this)[0];
};
isEmpty () {
return items.get(this).length === 0;
};
size () {
return items.get(this).length;
};
clear () {
items.set(this, []);
};
print () {
console.log(items.get(this).toString());
};
}
return Queue;
})();