之前说到栈是一种特殊的线性表,队列也是一种列表,与栈不同的是队列是一种FIFO((First-In-First-Out,先进先出)的数据结构,而栈与之相反。
队列分为两端——队尾和对首,队列从队尾插入元素,从队首删除元素,可以理解成现实生活中的先到先得的道理,好似排队一样,后到的人只能排在队尾。
队列和栈一样,同样的两种重要操作就是插入元素和删除元素,队列还有一个操作就是读取队首的元素,即peek()
方法,该方法返回位于队首的元素而不将其删除,如果想知道队列中有多少元素也可以通过查看length属性来知道。
使用数组实现一个队列
之前在数组操作中就提到shift()
和push()
方法,具体可以查看JavaScript数据结构与算法——数组操作
首先定义一个构造函数:
function Queue() {
this.dataStore = [];
this.enqueue = enqueue;
this.dequeue = dequeue;
this.front = front;
this.back = back;
this.toString = toString;
this.empty = empty;
}
实现enqueue方法
enqueue()
方法用于往队列中添加元素
function enqueue(element) {
this.dataStore.push(element);
}
实现dequeue方法
dequeue()
方法用于删除队列中的元素
function dequeue() {
return this.dataStore.shift();
}
返回队首或队尾的元素
定义如下方法用于返回队首或队尾的元素
function front() {
return this.dataStore[0];
}
function back() {
return this.dataStore[this.dataStore.length-1];
}