2. 隊(duì)列

1. 隊(duì)列簡介(先進(jìn)先出)
  • 隊(duì)列是一個(gè)先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu);
  • JS 中沒有隊(duì)列,但是可以用 Array 實(shí)現(xiàn)棧中的所有的功能;


    image.png
const queue = [];
queue.push(1); // 入隊(duì)
queue.shift(1);  // 出隊(duì)
2. 隊(duì)列使用場景
image.png
image.png
image.png
image.png
image.png
image.png
var RecentCounter = function() {
    this.q = [];
}

RecentCounter.prototype.ping = function(t) {
    this.q.push(t);
    // 將不在范圍內(nèi)的數(shù)據(jù)出棧
    while(this.q[0] < t - 3000) {
        this.q.shift();
    }
    return this.q.length;
}

時(shí)間復(fù)雜度O(n)和空間復(fù)雜度O(n)

3. js 異步中的任務(wù)隊(duì)列
image.png

執(zhí)行過程: 一段js代碼剛執(zhí)行會(huì)有一個(gè)匿名的主事件丟到 Callback Queue 中,然后 js 引擎會(huì)去任務(wù)隊(duì)列取一個(gè)事件去執(zhí)行,在執(zhí)行這個(gè)事件的過程中,如果里面有異步任務(wù),他就丟給 WebAPIs去執(zhí)行,自己繼續(xù)去執(zhí)行后面的代碼,WebAPIs執(zhí)行完之后,會(huì)將回調(diào)函數(shù)的js代碼重新丟回 Callback Queue 中,等待 js 引擎執(zhí)行;(按照隊(duì)列的執(zhí)行順序)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容