队列是一种支持先进先出(FIFO)的集合,即先被插入的数据,先被取出!队列的示意图如图1所示,
图1
我们先来声明队列的构造函数,
//队列的构造函数
function Queue() {
this.dataStore = [];
this.enqueue = enqueue;
this.dequeue = dequeue;
this.front = front;
this.back = back;
this.count= count;
this.isEmpty= isEmpty;
this.toString = toString;
this.clear = clear;
}
入队enqueue
入队方法enqueue是在队列尾部插入一个值,由于存储数据的是dataStore数组,在数组最后插入一个值可以通过push方法实现,
//入队
function enqueue(element) {
this.dataStore.push(element)
}
出队dequeue
出队方法dequeue是将数组第一个位置的值删除并返回,而数组的shift() 方法恰好用于把数组的第一个元素从其中删除,并返回第一个元素的值,所以调用dataStore的shift()方法即可实现,
//出队
function dequeue() {
return this.dataStore.shift();
}
取队首元素方法front
front方法返回队列第一个值,即返回数组dataStore下标为0的值,
//返回队列第一个元素
function front() {
return this.dataStore[0];
}
取队尾元素方法back
back方法返回队列最后一个值,即取数组dataStore下标为length-1的值,
//返回队列最后一个元素
function back() {
return this.dataStore[this.dataStore.length - 1]
}
计算队列长度方法count
count方法返回队列的长度,即取数组dataStore的长度length,
//返回队列长度
function count(){
return this.dataStore.length;
}
判断队列是否为空方法isEmpty
isEmpty方法用来判断队列是否为空,可通过判断数组dataStore的长度是否为0来判断,
//判断队列是否为空
function isEmpty() {
if (ths.dataStore.length == 0) {
return true;
} else {
return false;
}
}
将队列转为字符串方法toString
toString方法将队列的值拼接成字符串,即遍历数组dataStore的每一个值并将其拼接为字符串,即使数组dataStore的元素不是字符串,但是后面加”**”后(就算是加空字符串),其结果也会为字符串,最后返回拼接后的结果就行了。
//将队列转为字符串
function toString() {
var retStr = "";
for (var i = 0; i < this.dataStore.length; ++i ) {
retStr += this.dataStore[i] + " ";
}
return retStr
}
清空队列方法clear
function clear(){
this.dataStore = [];
}
下面写段代码来测试一下此队列
var queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
console.log("入队1,2,3后队列转为字符串为:" + queue.toString());
console.log("入队1,2,3后队列是否为空:" + queue.isEmpty());
console.log("队首元素为:" + queue.front());
console.log("队尾元素为:"+queue.back());
console.log("队列长度为:"+queue.count());
queue.dequeue();
console.log("出队一个元素后为:"+queue.toString());
queue.clear();
console.log("队列中元素全部出队后队列是否为空:" + queue.isEmpty());
结果如下:
需完整代码的话请去 https://github.com/lilythy/dataStructure/blob/master/queue.html 查看。