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

資訊專欄INFORMATION COLUMN

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

Cobub / 2087人閱讀

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

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

因?yàn)槭莻€(gè)新手,所以都是最簡單的知識學(xué)習(xí)梳理。

什么是棧

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

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

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

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

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

棧的創(chuàng)建

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

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類,然后驗(yàn)證一下棧是否為空

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

然后添加元素入棧

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

獲得最后添加的元素

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

再添加一個(gè)元素

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

移除兩個(gè)元素

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

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

/**
 * [數(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í)隊(duì)列。。。。

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

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

相關(guān)文章

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

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

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

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

    Alfred 評論0 收藏0
  • 堆和棧

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

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

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

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

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

    acrazing 評論0 收藏0

發(fā)表評論

0條評論

Cobub

|高級講師

TA的文章

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