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

資訊專欄INFORMATION COLUMN

javascript實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)中的棧結(jié)構(gòu)

xuxueli / 764人閱讀

摘要:在中,一些利用原本數(shù)組沒法輕易解決的問題,其實(shí)也是可以通過模擬數(shù)據(jù)結(jié)構(gòu)來解決問題的,并非是說前端就不需要去學(xué)數(shù)據(jù)結(jié)構(gòu)與算法,懂得數(shù)據(jù)結(jié)構(gòu)的前端才是真的程序員。

在javascript中,一些利用原本數(shù)組沒法輕易解決的問題,其實(shí)也是可以通過模擬數(shù)據(jù)結(jié)構(gòu)來解決問題的,并非是說前端就不需要去學(xué)數(shù)據(jù)結(jié)構(gòu)與算法,懂得數(shù)據(jù)結(jié)構(gòu)的前端才是真的程序員。

下面簡單地用javascript來實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)中的棧結(jié)構(gòu),棧結(jié)構(gòu)的先入后出性質(zhì)在解決某些數(shù)據(jù)問題時很有用

棧的構(gòu)造函數(shù)

function Stack() {
    this.dataStore = [];
    this.top = 0;
    this.push = push;
    this.pop = pop;
    this.peek = peek;
    this.clear = clear;
    this.length = length;
}

從棧頂放入某個元素

function push(element) {
    this.dataStore[this.top++] = element;
}

從棧頂取出某個元素

function pop() {
    return this.dataStore[--this.top]
}

獲得棧的高度

function length() {
    return this.top;
}

清空整個棧

function clear() {
    this.top = 0;
}

改變棧頂?shù)奈恢?/p>

function peek() {
   return this.dataStore[this.top - 1];
}

下面是一個有趣的例子 利用stack類實(shí)現(xiàn)10進(jìn)制轉(zhuǎn)換為其它進(jìn)制
function mulBase(num, base) {
    let s = new Stack();
    do {
        s.push(num % base);
        num = Math.floor(num /= base);
    } while (num > 0);
    let content = "";
    while (s.length() > 0) {
        content += s.pop();
    }
    return content;
}
將10進(jìn)制數(shù)9轉(zhuǎn)換為2進(jìn)制數(shù)1001 print(mulBase(9, 2));
又是一個有趣的例子,用棧來判斷是否是回文,回文就是一個字符串,從前往后寫跟從后往前寫都是一樣的 例如"racecar","data"
function isPalindrome(word) {
        let s = new Stack();
        for (let i = 0; i < word.length; i++) {
            s.push(word[i]);
        }
        let rword = "";
        while (s.length() > 0) {
            rword += s.pop();
        }
        if (word == rword) {
            return true;
        } else {
            return false;
        }
    }
判斷racecar是否是回文 print(isPalindrome("racecar"));用棧可以實(shí)現(xiàn)很多方便的功能,可以見得前端了解數(shù)據(jù)結(jié)構(gòu)尤為重要。

歡迎評論以及留言,同時歡迎關(guān)注我的博客定時不斷地更新我的文章 陳建光的博客

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

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

相關(guān)文章

  • js模擬簡單的棧和隊列

    摘要:移除數(shù)組第一項并返回該項同時將數(shù)組的長度減一。簡單實(shí)現(xiàn)棧使用和結(jié)合實(shí)現(xiàn)簡單棧簡單實(shí)現(xiàn)隊列使用與結(jié)合實(shí)現(xiàn)簡單隊列額外補(bǔ)充與用途相反,在數(shù)組前端添加任意個項,并返回新數(shù)組的長度。 棧和隊列 棧:LIFO(先進(jìn)后出)一種數(shù)據(jù)結(jié)構(gòu)隊列:LILO(先進(jìn)先出)一種數(shù)據(jù)結(jié)構(gòu) 使用的js方法 1.push();可以接收任意數(shù)量的參數(shù),把它們逐個推進(jìn)隊尾(數(shù)組末尾),并返回修改后的數(shù)組長度。2.po...

    張金寶 評論0 收藏0
  • 數(shù)據(jù)結(jié)構(gòu)javascript實(shí)現(xiàn)

    摘要:一數(shù)組二棧棧又名堆棧,它是一種運(yùn)算受限的線性表。其限制是僅允許在表的一端進(jìn)行插入和刪除運(yùn)算。這一端被稱為棧頂,相對地,把另一端稱為棧底。進(jìn)行插入操作的端稱為隊尾,進(jìn)行刪除操作的端稱為隊頭。 一、數(shù)組 二、棧 棧(stack)又名堆棧,它是一種運(yùn)算受限的線性表。其限制是僅允許在表的一端進(jìn)行插入和刪除運(yùn)算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向一個棧插入新元素又稱作進(jìn)棧、入棧或壓棧...

    Astrian 評論0 收藏0
  • 前端進(jìn)擊的巨人(二):棧、堆、隊列、內(nèi)存空間

    摘要:中有三種數(shù)據(jù)結(jié)構(gòu)棧堆隊列。前端進(jìn)擊的巨人一執(zhí)行上下文與執(zhí)行棧,變量對象中解釋執(zhí)行棧時,舉了一個乒乓球盒子的例子,來演示棧的存取方式,這里再舉個栗子搭積木。對于基本類型,棧中存儲的就是它自身的值,所以新內(nèi)存空間存儲的也是一個值。 面試經(jīng)常遇到的深淺拷貝,事件輪詢,函數(shù)調(diào)用棧,閉包等容易出錯的題目,究其原因,都是跟JavaScript基礎(chǔ)知識不牢固有關(guān),下層地基沒打好,上層就是豆腐渣工程,...

    edgardeng 評論0 收藏0
  • JVM體系結(jié)構(gòu)與工作方式概覽

    摘要:在本文,筆者將與大家概覽的體系結(jié)構(gòu)與工作方式。將第條和第條指令分別是將兩個局部變量入棧,然后相加。最后一條指令是,這條指令執(zhí)行完后當(dāng)前的這個方法對應(yīng)的這些部件會被回收,局部變量區(qū)的所有值將全部釋放,寄存器會被銷魂,在棧中與這個方 Java之所以號稱一次編譯,到處運(yùn)行,主要原因是JVM屏蔽了各個計算機(jī)平臺相關(guān)的軟件(大多指系統(tǒng))或者硬件之間的差異,使得與平臺相關(guān)的耦合統(tǒng)一由JVM提供者來...

    suosuopuo 評論0 收藏0
  • java的棧

    摘要:對于執(zhí)行引擎來說,在活動線程中,只有位于棧頂?shù)臈攀亲钣行У姆Q為當(dāng)前棧幀與這個棧幀相關(guān)聯(lián)的方法稱為當(dāng)前方法。執(zhí)行引擎運(yùn)行的所有的字節(jié)碼指令都只針對當(dāng)前棧幀進(jìn)行操作。 showImg(https://segmentfault.com/img/bVbvueY?w=1600&h=800); 棧幀數(shù)據(jù)結(jié)構(gòu) 棧幀(Stack Frame)是用來支持虛擬機(jī)進(jìn)行方法調(diào)用和方法執(zhí)行的數(shù)據(jù)結(jié)構(gòu),它是虛...

    jeyhan 評論0 收藏0

發(fā)表評論

0條評論

xuxueli

|高級講師

TA的文章

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