亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

我對JS棧的簡單學(xué)習(xí)

Cobub / 2098人閱讀

摘要:我對棧的學(xué)習(xí)因為是個新手,所以都是最簡單的知識學(xué)習(xí)梳理。棧是一種遵從后進(jìn)先出原則的有序集合,新添加的或者待刪除的元素都保留在棧的末尾,稱作棧頂,另一端叫做棧底。棧的學(xué)習(xí)棧的創(chuàng)建創(chuàng)建一個類來表示棧。對于棧來說只能用和方法來進(jìn)行添加和刪除元素。

我對棧的學(xué)習(xí)

因為是個新手,所以都是最簡單的知識學(xué)習(xí)梳理。

什么是棧

數(shù)組是計算機(jī)科學(xué)中最常用的數(shù)據(jù)結(jié)構(gòu),是數(shù)據(jù)元素的集合。有時候我們需要一種添加或者刪除元素時更可控的數(shù)據(jù)結(jié)構(gòu),他們就是隊列和棧。

隊列是遵從先進(jìn)先出(FIFO)原則的一組有序的項,隊列在尾部添加新元素,并從頂部移除元素。這里不先詳細(xì)說明。

棧是一種遵從后進(jìn)先出(LIFO)原則的有序集合,新添加的或者待刪除的元素都保留在棧的末尾,稱作棧頂,另一端叫做棧底。新元素都在棧頂。

棧也被用在編譯語言的編譯器和內(nèi)存中保存變量、方法調(diào)用等。

棧的學(xué)習(xí)

棧的創(chuàng)建

創(chuàng)建一個類來表示棧。

function Stack() {
    //各種屬性和方法的聲明
}

需要一種數(shù)據(jù)結(jié)構(gòu)來保存棧里的元素,這里選擇數(shù)組。

var items = [];

棧的基本操作

入棧方法:添加元素到棧,這里要注意添加到棧的元素只能到棧頂,也就是棧的末尾。

this.push = function (element) {
    items.push(element);
}

出棧方法:移除棧里的元素,注意移除的是最后添加進(jìn)去的元素。

this.pop = function () {
    return items.pop();
}

對于棧來說只能用push和pop方法來進(jìn)行添加和刪除元素。

獲取棧頂元素:我們想知道最后添加的元素是什么

this.peek = function () {
    return items[items.length - 1];
}

別忘了這里我們使用數(shù)組來存儲棧內(nèi)的元素

判斷??眨簵榭辗祷豻rue。

this.isEmpty = function () {
    return items.length == 0;
}

對于集合,最好是使用size來代替length,這里我們簡單了。

清空棧:移除棧內(nèi)的所有元素,把棧清空

this.clear = function () {
    items = []; //最簡單的方式
}
棧的使用

首先需要初始化Stack類,然后驗證一下棧是否為空

var stack = new Stack();
console.log(stack.isEmpty()); //true,此時還沒有添加元素

然后添加元素入棧

stack.push(8);
stack.push(4);

獲得最后添加的元素

console.log(stack.peek()); //4,因為4是最后被添加的元素

再添加一個元素

stack.push(11);
console.log(stack.size()); //輸出3,此時棧里有3個元素
console.log(stack.isEmpty()); //false,此時棧里已經(jīng)有元素了

移除兩個元素

stack.pop();
stack.pop();
console.log(stack.size()); //1,此時只剩下一個元素
進(jìn)制的轉(zhuǎn)換

10進(jìn)制轉(zhuǎn)換為其他進(jìn)制通常都是整除法。(可以自行搜索進(jìn)制轉(zhuǎn)換時的方法以及形式)

/**
 * [數(shù)字,轉(zhuǎn)換成相應(yīng)進(jìn)制的進(jìn)制數(shù)]
 * @param  {[Number]} decNumber [想轉(zhuǎn)的數(shù)]
 * @param  {[Number]} base      [想轉(zhuǎn)的進(jìn)制]
 * @return {[Number]}           [轉(zhuǎn)換進(jìn)制后的數(shù)]
 */
function baseConverter (decNumber, base) {
    var remStack = new Stack(),
        rem,
        baseString = "",
        digits = "0123456789ABCDEF";

//將每次得到的進(jìn)制數(shù)放入棧中
    while (decNumber > 0) {
        rem = Math.floor(decNumber % base);
        remStack.push(rem);
        decNumber = Math.floor(decNumber / base);
    }    

//后進(jìn)先出,所以出棧剛好符合進(jìn)制轉(zhuǎn)換的形式
    while (!remStack.isEmpty()) {
        //這里通過digits的下標(biāo)來獲得相應(yīng)字符。比如pop出7,這里digits[7]就是7,pop出16,這里digits[16]就是F
        baseString += digits[remStack.pop()];
    }

    return baseString;
}

baseConverter(100345, 2); //11000011111111001
baseConverter(100345, 8); //303771
baseConverter(100345, 16); //187F9

下一篇簡單的學(xué)習(xí)隊列。。。。

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/86920.html

相關(guān)文章

  • 我對JS隊列的學(xué)習(xí)

    摘要:我對隊列的學(xué)習(xí)什么是隊列隊列是遵循先進(jìn)先出原則的一組有序的項。最新添加的元素必須排在隊列的末尾。隊列的學(xué)習(xí)隊列的操作其實是和棧是差不多的,但是隊列只允許新數(shù)據(jù)在后端進(jìn)行添加。這里是最小優(yōu)先隊列,優(yōu)先值較小的元素被放置在隊列最前面。 我對JS隊列的學(xué)習(xí) 什么是隊列 隊列是遵循FIFO(先進(jìn)先出)原則的一組有序的項。隊列在尾部添加新元素,并從頂部移除元素。最新添加的元素必須排在隊列的末尾。...

    Cristic 評論0 收藏0
  • JS數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí):棧

    摘要:棧的應(yīng)用前面介紹了那么多棧相關(guān)的知識,最后也是介紹棧的應(yīng)用場景的時候了,棧的實際應(yīng)用非常廣泛,例如用來存儲訪問過的任務(wù)或路徑撤銷的操作。 棧的定義 什么是棧?棧是一種遵循后進(jìn)先出原則的有序集合,新添加的或者待刪除的元素都保存在棧的同一端,稱為棧頂,另一端稱為棧底,在棧里,新元素靠近棧頂,舊元素靠近棧底,用個圖來看大概這樣式的:showImg(https://segmentfault.c...

    Alfred 評論0 收藏0
  • 堆和棧

    摘要:百度百科上對堆和棧進(jìn)行了對比分析堆??臻g分配棧操作系統(tǒng)由操作系統(tǒng)自動分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等。堆棧緩存方式棧使用的是一級緩存,他們通常都是被調(diào)用時處于存儲空間中,調(diào)用完畢立即釋放。顯然,堆的效率比棧要低得多。 相信很多程序員對于堆和棧的概念,總是感覺很朦朧,感覺在哪里聽過見過,并沒有深交。 在計算機(jī)領(lǐng)域,堆棧是一個不容忽視的概念,我們編寫的C語言程序基本上都要用到。但...

    lscho 評論0 收藏0
  • 我對JS字典的簡單學(xué)習(xí)

    摘要:我對字典的簡單學(xué)習(xí)字典的概念集合字典和散列表都可以來存儲不重復(fù)的值。字典也被稱為映射。中有集合類的實現(xiàn),也有字典類的實現(xiàn)。相關(guān)操作方法實現(xiàn)方法,判斷某個鍵值是否在這個字典中,有則返回。實現(xiàn)方法,將字典所有的值以數(shù)組的形式返回。 我對JS字典的簡單學(xué)習(xí) 字典的概念 集合、字典和散列表都可以來存儲不重復(fù)的值。在集合中我們使用[值,值]來保存,在字典和散列表中使用[鍵,值]來存儲數(shù)據(jù)。 字典...

    CntChen 評論0 收藏0
  • Android 使用 SoftReference 解決 Activity 存棧的內(nèi)存泄漏問題

    摘要:利用存棧的方式來所有這個方法目前來看是對我直接有效的,但是實際運行過程中,會報內(nèi)存泄漏的異常,原因是我的會對每一個啟動時進(jìn)行添加,而當(dāng)我某個時,里對應(yīng)的無法被,這樣導(dǎo)致我的內(nèi)存開銷增加了。原文地址使用解決存棧的內(nèi)存泄漏問題我的博客時空路由器 當(dāng) Android 想要退出應(yīng)用時,我們總是希望完全退出。但是 Android 并沒有提供一個完全退出 App 的函數(shù)。 Google 上搜索了一...

    acrazing 評論0 收藏0

發(fā)表評論

0條評論

Cobub

|高級講師

TA的文章

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