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

資訊專欄INFORMATION COLUMN

我對JS棧的簡單學習

Cobub / 2053人閱讀

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

我對棧的學習

因為是個新手,所以都是最簡單的知識學習梳理。

什么是棧

數組是計算機科學中最常用的數據結構,是數據元素的集合。有時候我們需要一種添加或者刪除元素時更可控的數據結構,他們就是隊列和棧。

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

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

棧也被用在編譯語言的編譯器和內存中保存變量、方法調用等。

棧的學習

棧的創建

創建一個類來表示棧。

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

需要一種數據結構來保存棧里的元素,這里選擇數組。

var items = [];

棧的基本操作

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

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

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

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

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

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

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

別忘了這里我們使用數組來存儲棧內的元素

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

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

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

清空棧:移除棧內的所有元素,把棧清空

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,此時棧里已經有元素了

移除兩個元素

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

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

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

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

//后進先出,所以出棧剛好符合進制轉換的形式
    while (!remStack.isEmpty()) {
        //這里通過digits的下標來獲得相應字符。比如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

下一篇簡單的學習隊列。。。。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/86920.html

相關文章

  • 我對JS隊列的學習

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

    Cristic 評論0 收藏0
  • JS數據結構學習:棧

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

    Alfred 評論0 收藏0
  • 堆和棧

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

    lscho 評論0 收藏0
  • 我對JS字典的簡單學習

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

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

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

    acrazing 評論0 收藏0

發表評論

0條評論

Cobub

|高級講師

TA的文章

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