对队列的操作主要是:向队列中插入新元素和删除队列中的元素。插入操作也叫作入队,删除操作也叫作出队。入队操作在队尾插入新元素,出队操作删除对头元素。
队列的另外一个重要操作是读取队头的元素,叫peek()。该操返回队头元素,但是不把它从队列中删除。还有length属性读取队列长度,clear()方法清空队列。
使用数组来实现队列看起来顺理成章,数组的push()方法可以在数组末尾加入
元素。shift()方法则返回可删除数组的第一个元素。
准备开始实现Queue类,先从构造函数开始:
funtiion Queue(){
this.dataStore = [];
this.enqueue = enqueue;
this.dequeue = dequeue;
this.front = front;
this.back = back;
this.toString = toString;
this.empty = empty;
}
equeue()方法向队尾添加一个元素:
function equeue(){
this.dataStore.push(element);
}
dequeue()方法删除队首元素:
function dequeue(){
return this.dataStore.shift();
}
可以使用如下的方法读取队首和队尾的元素:
function front(){
return this.dataStore[0];
}
function back(){
return this.dataStore[this.dataStore.length - 1];
}
还需要toString()方法显示列内所有的元素:
function toString(){
var retStr = "";
for (var i = 0; i < this.dataStore.length; ++i) {
retStr += this.dataStore[i] + "\n";
}
return retStr;
}
最后还需要一个方法判断队列是否为空:
function empty(){
if(this.dataStore.length == 0){
return true;
}
else{
return false;
}
}
//测试程序
var q = new Queue();
q.enqueue("Meredith");
q.enqueue("Cynthia");
q.enqueue("Jennifer");
console.log(q.toString());
q.dequeue();
console.log(q.toString());
q.dequeue();
console.log(q.toString());
console.log("Front of queue: " + q.front());
console.log("Back of queue" + q.back());
输出为
Meredith
Cynthia
Jennifer
Cynthis
Jennifer
Front of queue : Cynthia
Back of queue : Jennifer
使用队列:方块舞的舞伴分配问题