国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

psychola / 690人閱讀

摘要:列表項目棧是一種后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),我們所能操作的都是棧頂元素,刪除一個棧頂元素叫做出棧或者彈棧,添加一個元素叫做入棧或者壓棧首先構(gòu)建我們的抽象數(shù)據(jù)類型棧頂元素位置保存數(shù)據(jù)的數(shù)組壓棧出棧查看棧頂元素清空棧棧的長度輸出棧元素描述模擬輸出

列表項目

棧是一種后進(jìn)先出(LIFO)的數(shù)據(jù)結(jié)構(gòu),我們所能操作的都是棧頂元素,刪除一個棧頂元素叫做出棧或者彈棧,添加一個元素叫做入棧或者壓棧.

ADT

首先構(gòu)建我們的抽象數(shù)據(jù)類型.

Stack
top // 棧頂元素位置
dataStore //保存數(shù)據(jù)的數(shù)組
push // 壓棧
pop // 出棧
peek // 查看棧頂元素
empty // 清空棧
length // 棧的長度
print // 輸出棧元素
Javascript 描述
function Stack () {
    this.top = 0;
    this.dataStore = [];
}
Stack.prototype = {
    constructor: Stack,
    push: function (element) {
        return this.dataStore[this.top++] = element;
    },
    pop: function () {
        return this.dataStore.length ? 
                this.dataStore.splice(--this.top, 1) :
                false;
    },
    peek: function () {
        return this.dataStore[this.top - 1];
    },
    empty: function () {
        this.dataStore.length = 0;    
    },
    length: function () {
        return this.dataStore.length;
    },
    // 模擬輸出棧結(jié)構(gòu)
    print: function () {
        for (var i = this.length() - 1; i >= 0; i--) {
            console.log(this.dataStore[i] + "
");
        }
    }
}
測試
var stack = new Stack();
// 入棧
stack.push("jiavan");
stack.push("jiavan2");
stack.push("jiavan3");
stack.push("jiavan4");

// jiavan4
// jiavan3
// jiavan2
// jiavan
stack.print();

// jiavan4
stack.pop();
// jiavan3
stack.peek();
// 3
stack.top;
// jiavan3
// jiavan2
// jiavan
stack.print();
應(yīng)用

對num數(shù)進(jìn)行n進(jìn)制的轉(zhuǎn)換,大致算法如下:

對num和n進(jìn)行求余和想除取整

將余數(shù)入棧push

回到第一步直至除到值為0

function transformNum(num, base) {
    var res = parseInt(num / base);
    var stack = new Stack();
    stack.push(num % base);
    while (parseInt(res)) {
        stack.push(parseInt(res % base));
        res /= base;
    }
    stack.print();
}

// transformNum(10, 2), 1010
// transformNum(10, 8), 12

棧的應(yīng)用還有很多,比如匹配括號以及表達(dá)式求值等等.

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

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/79336.html

相關(guān)文章

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

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

    Anonymous1 評論0 收藏0
  • js4agls數(shù)據(jù)結(jié)構(gòu)JavaScript描述-鏈表篇

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

    Xufc 評論0 收藏0
  • React.js 小書 Lesson6 - 使用 JSX 描述 UI 信息

    摘要:上面的代碼小書經(jīng)過編譯以后會變成小書會構(gòu)建一個對象里描述你結(jié)構(gòu)的信息,包括標(biāo)簽名屬性還有子元素等。第二個原因是,有了這樣一個對象。負(fù)責(zé)把這個用來描述信息的對象變成元素,并且渲染到面上。下一節(jié)中我們將介紹小書組件的方法。 React.js 小書 Lesson6 - 使用 JSX 描述 UI 信息 本文作者:胡子大哈本文原文:http://huziketang.com/books/rea...

    ChanceWong 評論0 收藏0
  • javaScript中的Object類型

    摘要:默認(rèn)為當(dāng)該屬性的為時,才能被賦值運(yùn)算符改變。可以是任何有效的值數(shù)值,對象,函數(shù)等。而這些篡改可能會影響對象的內(nèi)置屬性或方法,從而導(dǎo)致對象的正常功能可能無法使用。 屬性描述符 JavaScript提供了一個內(nèi)部數(shù)據(jù)結(jié)構(gòu),用于描述對象的值,控制其行為,例如該屬性是否可寫、是否可配置、是否可修改以及是否可枚舉等。這個內(nèi)部數(shù)據(jù)結(jié)構(gòu)被稱為‘屬性描述符’。每個屬性都有自己對應(yīng)的屬性描述符,保存該屬...

    hyuan 評論0 收藏0
  • JavaScript-面向?qū)ο蟆bject類型

    摘要:面向?qū)ο竺嫦驅(qū)ο缶幊痰娜Q為簡稱。面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實世界模型的一種編程方式。面向?qū)ο缶幊炭梢钥醋鍪鞘褂靡幌盗袑ο笙嗷f(xié)作的軟件設(shè)計。面向?qū)ο缶幊痰娜齻€主要特征是封裝繼承多態(tài)。 面向?qū)ο?面向?qū)ο缶幊痰娜Q為Object Oriented Programming,簡稱OOP。面向?qū)ο缶幊淌怯贸橄蠓绞絼?chuàng)建基于現(xiàn)實世界模型的一種編程方式。面向?qū)ο缶幊炭梢钥醋鍪鞘褂靡幌盗袑ο?..

    amuqiao 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<