成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【js4agls】數(shù)據(jù)結(jié)構(gòu)JavaScript描述-隊(duì)列篇

Anonymous1 / 1251人閱讀

摘要:隊(duì)列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),與棧不同的是,它操作的元素是在兩端,而且進(jìn)行的是不一樣的操作。

隊(duì)列(Queue)是一種先進(jìn)先出(First-In-First-Out, FIFO)的數(shù)據(jù)結(jié)構(gòu),與棧不同的是,它操作的元素是在兩端,而且進(jìn)行的是不一樣的操作。向隊(duì)列的隊(duì)尾加入一個(gè)元素叫做入隊(duì)列(enQueue),向隊(duì)列的隊(duì)首刪除一個(gè)元素叫做出隊(duì)列(delQueue).

ADT
Queue
---
length,屬性,隊(duì)列長(zhǎng)度
dataStore,屬性,存儲(chǔ)數(shù)據(jù)
enQueue,方法,入隊(duì)列
delQueue,方法,出隊(duì)列
empty,方法,清空隊(duì)列
front,方法,獲得隊(duì)首元素
rear,方法,獲得隊(duì)尾元素
print,方法,打印隊(duì)列
JavaScript描述
// 構(gòu)造函數(shù)
function Queue () {
    this.length = 0;
    this.dataStore = [];
}
// 原型核心方法
Queue.prototype = {
    constructor: Queue,
    enQueue: function (element) {
        // 存儲(chǔ)元素并使隊(duì)列長(zhǎng)度加1
        this.dataStore[this.length++] = element;
    },
    delQueue: function () {
        var res = this.dataStore[0], //取得隊(duì)首元素
            i;

        // 當(dāng)隊(duì)列不為空
        if (res !== undefined) {
            
            // 這里盡量避免使用js語(yǔ)言特性來(lái)實(shí)現(xiàn)
            // 取出隊(duì)首元素,并讓隊(duì)列后方元素向前移動(dòng),隊(duì)列長(zhǎng)度減一
            // js數(shù)組其實(shí)已經(jīng)實(shí)現(xiàn)了隊(duì)列的方法,刪除隊(duì)首shift
            if (this.length > 1) {
                for (i = 0; i < this.length - 1; i++) {
                    this.dataStore[i] = this.dataStore[i + 1];
                }
                this.dataStore.length -= 1;
            } else {
                // 當(dāng)只有一個(gè)元素時(shí),出隊(duì)列后數(shù)組為空
                this.dataStore = [];
            }
            this.length -= 1;
        }

        return res;
    },
}
// 其他方法
empty: function () {
    this.dataStore.length = 0;
    this.length = 0;
},
front: function () {
    return this.dataStore[0];
},
rear: function () {
    return this.dataStore[this.length - 1];
},
print: function () {
    for (var i = 0; i < this.length; i++) {
        console.log(this.dataStore[i] + "
");
    }
}
測(cè)試
var q = new Queue();
q.enQueue("jiavan");
q.enQueue("jiavan2");
q.enQueue("jiavan3");
q.enQueue("jiavan4");
q.print();
q.delQueue(); // jiavan
q.length; // 3
q.front(); //jiavan2
q.rear();// jiavan4
q.empty();
q.dataStore; //[]

系列文章原文地址https://github.com/Jiavan/js4algs GitHub repo上有源碼和更好的閱讀體驗(yàn),若有錯(cuò)誤歡迎發(fā)PR,若對(duì)你有所幫助也歡迎star!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/79333.html

相關(guān)文章

  • js4agls數(shù)據(jù)結(jié)構(gòu)JavaScript描述-鏈表

    摘要:我們可以使用鏈表這種數(shù)據(jù)結(jié)構(gòu),來(lái)刪除元素的時(shí)候而不必讓后面的元素向前移動(dòng)。一個(gè)節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn)稱為它的前驅(qū),下一個(gè)節(jié)點(diǎn)即指向的節(jié)點(diǎn)稱為它的后繼節(jié)點(diǎn),在簡(jiǎn)單的單向鏈表中,第一個(gè)節(jié)點(diǎn)稱為頭節(jié)點(diǎn)它沒(méi)有前驅(qū)節(jié)點(diǎn),最后一個(gè)節(jié)點(diǎn)沒(méi)有后繼節(jié)點(diǎn)為。 之前我們用數(shù)組的方式來(lái)實(shí)現(xiàn)了隊(duì)列,是否還記得在出隊(duì)列后有這樣一段代碼: for (i = 0; i < this.length - 1; i++) { ...

    Xufc 評(píng)論0 收藏0
  • js4agls數(shù)據(jù)結(jié)構(gòu)JavaScript描述-棧

    摘要:列表項(xiàng)目棧是一種后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),我們所能操作的都是棧頂元素,刪除一個(gè)棧頂元素叫做出?;蛘邚棗#砑右粋€(gè)元素叫做入?;蛘邏簵J紫葮?gòu)建我們的抽象數(shù)據(jù)類型棧頂元素位置保存數(shù)據(jù)的數(shù)組壓棧出棧查看棧頂元素清空棧棧的長(zhǎng)度輸出棧元素描述模擬輸出 列表項(xiàng)目 棧是一種后進(jìn)先出(LIFO)的數(shù)據(jù)結(jié)構(gòu),我們所能操作的都是棧頂元素,刪除一個(gè)棧頂元素叫做出?;蛘邚棗?,添加一個(gè)元素叫做入?;蛘邏簵? show...

    psychola 評(píng)論0 收藏0
  • Nodejs高性能原理(上) --- 異步非阻塞事件驅(qū)動(dòng)模型

    摘要:使用了一個(gè)事件驅(qū)動(dòng)非阻塞式的模型,使其輕量又高效。的包管理器,是全球最大的開(kāi)源庫(kù)生態(tài)系統(tǒng)。按照這個(gè)定義,之前所述的阻塞,非阻塞,多路復(fù)用信號(hào)驅(qū)動(dòng)都屬于同步。 系列文章 Nodejs高性能原理(上) --- 異步非阻塞事件驅(qū)動(dòng)模型Nodejs高性能原理(下) --- 事件循環(huán)詳解 前言 終于開(kāi)始我nodejs的博客生涯了,先從基本的原理講起.以前寫(xiě)過(guò)一篇瀏覽器執(zhí)行機(jī)制的文章,和nodej...

    yy736044583 評(píng)論0 收藏0
  • 文章教會(huì)你Event loop——瀏覽器和Node

    摘要:如果沒(méi)到毫秒,那么階段就會(huì)跳過(guò),進(jìn)入階段,先執(zhí)行的回調(diào)函數(shù)。參考文檔什么是瀏覽器的事件循環(huán)不要混淆和瀏覽器中的定時(shí)器詳解瀏覽器和不同的事件循環(huán)深入理解事件循環(huán)機(jī)制篇中的執(zhí)行機(jī)制 最近對(duì)Event loop比較感興趣,所以了解了一下。但是發(fā)現(xiàn)整個(gè)Event loop盡管有很多篇文章,但是沒(méi)有一篇可以看完就對(duì)它所有內(nèi)容都了解的文章。大部分的文章都只闡述了瀏覽器或者Node二者之一,沒(méi)有對(duì)比...

    Leck1e 評(píng)論0 收藏0
  • 關(guān)于修改DOM是異步還是同步的問(wèn)題

    摘要:還請(qǐng)同學(xué)跟我多多探討關(guān)于修改是異步還是同步的問(wèn)題先來(lái)看代碼上述代碼的結(jié)果完全就是同步的表現(xiàn),如果是異步的話,毫無(wú)疑問(wèn),第一個(gè)下的每個(gè)內(nèi)容都應(yīng)該是,第二個(gè)也應(yīng)該是。 回 @bf 同學(xué) 本篇文章不是筆記也不是心得,而是關(guān)于一個(gè)問(wèn)題的討論,問(wèn)題最初出現(xiàn)于https://segmentfault.com/q/1010000005630545?_ea=903562 由于 @bf 同學(xué)不方便...

    qingshanli1988 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<