在javascript中,隊(duì)列是一種常用的數(shù)據(jù)結(jié)構(gòu),它的特點(diǎn)是“先進(jìn)先出”,即先入隊(duì)的元素先出隊(duì)。實(shí)現(xiàn)隊(duì)列可以用數(shù)組或者鏈表,本文將以數(shù)組為例,介紹javascript如何實(shí)現(xiàn)隊(duì)列。
在javascript中,可以使用數(shù)組來(lái)實(shí)現(xiàn)隊(duì)列。我們可以使用push()方法來(lái)向隊(duì)尾添加元素,使用shift()方法來(lái)從隊(duì)頭刪除元素,并利用length屬性來(lái)獲取隊(duì)列長(zhǎng)度。下面是一個(gè)實(shí)現(xiàn)隊(duì)列的代碼示例:
class Queue { constructor() { this.items = []; } enqueue(element) { this.items.push(element); } dequeue() { return this.items.shift(); } size() { return this.items.length; } }
我們可以通過(guò)實(shí)例化Queue類(lèi)來(lái)創(chuàng)建隊(duì)列,并使用enqueue()方法將元素添加到隊(duì)列中,使用dequeue()方法將隊(duì)頭元素刪除,使用size()方法獲取隊(duì)列長(zhǎng)度。例如:
let queue = new Queue(); queue.enqueue("a"); queue.enqueue("b"); queue.enqueue("c"); console.log(queue.size()); // output: 3 console.log(queue.dequeue()); // output: "a" console.log(queue.dequeue()); // output: "b" console.log(queue.size()); // output: 1
除了基本的隊(duì)列操作之外,我們可能還需要一些其他的函數(shù)來(lái)對(duì)隊(duì)列進(jìn)行一些高級(jí)處理,比如按照優(yōu)先級(jí)進(jìn)行排序、遍歷隊(duì)列等。下面是幾個(gè)常用的函數(shù)示例:
1.按照優(yōu)先級(jí)進(jìn)行排序
class PriorityQueue extends Queue { enqueue(element, priority) { let queueElement = { element, priority }; if (this.isEmpty()) { this.items.push(queueElement); } else { let added = false; for (let i = 0; i< this.size(); i++) { if (queueElement.priority< this.items[i].priority) { this.items.splice(i, 0, queueElement); added = true; break; } } if (!added) { this.items.push(queueElement); } } } }
這個(gè)示例中,我們創(chuàng)建了一個(gè)PriorityQueue類(lèi),通過(guò)重定義enqueue()函數(shù)來(lái)按照元素的優(yōu)先級(jí)進(jìn)行排序,從上面的代碼可以看到,我們?cè)诓迦朐氐臅r(shí)候,首先創(chuàng)建了一個(gè)對(duì)象來(lái)存儲(chǔ)元素和優(yōu)先級(jí),然后遍歷隊(duì)列找到插入位置,最后調(diào)用splice()方法來(lái)插入元素。
2.遍歷隊(duì)列
Queue.prototype.forEach = function(callback) { for (let i = 0; i< this.size(); i++) { callback(this.items[i]); } }
這個(gè)示例中,我們給Queue類(lèi)添加了一個(gè)forEach()函數(shù),用來(lái)遍歷隊(duì)列,并傳入一個(gè)回調(diào)函數(shù)來(lái)對(duì)每一個(gè)遍歷到的元素進(jìn)行操作。例:
let queue = new Queue(); queue.enqueue("a"); queue.enqueue("b"); queue.enqueue("c"); queue.forEach(item =>console.log(item));
以上就是javascript實(shí)現(xiàn)隊(duì)列的一些基本方法,通過(guò)它們,我們可以靈活地操作隊(duì)列,并實(shí)現(xiàn)一些高級(jí)的功能。如果遇到其他的需求,我們還可以在此基礎(chǔ)上進(jìn)行擴(kuò)展。