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

資訊專欄INFORMATION COLUMN

JavaScript數(shù)據(jù)結(jié)構(gòu)與算法—— 棧

王巖威 / 2822人閱讀

摘要:棧數(shù)據(jù)結(jié)構(gòu)棧是一種遵循后進先出原則的有序集合。新添加的或待刪除的元素都保存在棧的同一端,叫做棧頂,另一端叫棧底。在棧中,新元素靠近棧頂,舊元素接近棧底。

我們可以在數(shù)組的任何位置上刪除或者添加元素,但有時候我們還需要在元素的添加或刪除時有更多控制的數(shù)據(jù)結(jié)構(gòu),有兩種數(shù)據(jù)結(jié)構(gòu)類似于數(shù)組,但在添加或刪除元素時更為可控,它們就是棧和隊列。
本節(jié)主要介紹棧。

1.棧數(shù)據(jù)結(jié)構(gòu)

棧是一種遵循后進先出(LIFO)原則的有序集合。新添加的或待刪除的元素都保存在棧的同一端,叫做棧頂,另一端叫棧底。在棧中,新元素靠近棧頂,舊元素接近棧底。如下圖所示:

2.創(chuàng)建棧
// 首先創(chuàng)建一類表示棧
function Stack(){
    let items = []; // 選擇數(shù)組來保存棧中的元素 
    //各種屬性和方法
}

下面要為棧聲明一些方法:

push()  //  添加一個或多個新元素到棧頂
pop()  //  移除棧頂元素,同時返回被移除的元素
peek()  // 僅僅返回棧頂元素,不對棧做任何修改
isEmpty()  //  如果棧中沒有元素返回true,否則返回false
clear()  // 移除棧中所有元素
size()  // 返回棧中元素的個數(shù)(和數(shù)組length類似) 
2.1 向棧添加元素
this.push() = function(element) {
    items.push(element);
}
2.2 從棧移除元素
this.pop = function() {
    items.pop();
}
2.3 查看棧頂元素
this.peek = function() {
    return items[items.length - 1];
}
2.4 查看棧是否為空
this.isEmpty = function(){
    return items.length === 0;
}
this.size = function() {
    return items.lenght;
}
2.5 清空和打印棧元素
this.clear = function() {
    items = [];
} 
this.print = function() {
    console.log(items.toString());
}

經(jīng)過上述的方法的添加,我們就完整的創(chuàng)建了一了個棧 Stack。

3.棧的應(yīng)用—十進制轉(zhuǎn)N進制

首先我們寫出將十進制轉(zhuǎn)為二進制:

function divideBy2(decNum) {
    var remStack = new Stack(),
        rem,
        binaryString = "";
    // 將十進制數(shù)除2的余數(shù)放入一個stack中    
    while(decNum > 0) {
        // 取余
        rem = Math.floor(decNum % 2);
        // 入棧
        remStack.push(rem);
        decNum = Math.floor(decNum / 2);
    }    
    // 從棧中取出轉(zhuǎn)化為字符串然后連接起來構(gòu)成二進制
    while(!remStack.isEmpty()) {
        // 出棧
        binaryString += remStack.pop().toString();
    } 
    return binaryString;
}

下面十進制轉(zhuǎn)化N進制算法

function divideByN(decNum, n) {
    var remStack = new Stack(),
        rem,
        binaryString = "",
        digits = "0123456789ABCDEF";
    // 將十進制數(shù)除N的余數(shù)放入一個stack中    
    while(decNum > 0) {
        // 取余
        rem = Math.floor(decNum % n);
        // 入棧
        remStack.push(rem);
        decNum = Math.floor(decNum / n);
    }    
    // 從棧中取出轉(zhuǎn)化為字符串然后連接起來構(gòu)成二進制
    while(!remStack.isEmpty()) {
        // 出棧 使用digits方便在16進制中做個對應(yīng)轉(zhuǎn)化
        binaryString += digits[remStack.pop()];
    } 
    return binaryString;
}

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

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

相關(guān)文章

  • 學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)算法(一):隊列

    摘要:之?dāng)?shù)組操作接下來就是數(shù)據(jù)結(jié)構(gòu)的第一部分,棧。以字符串顯示棧中所有內(nèi)容方法的實現(xiàn)說明需要往棧中添加新元素,元素位置在隊列的末尾。的前端樂園原文鏈接寒假前端學(xué)習(xí)學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法,棧與隊列 本系列的第一篇文章: 學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法(一),棧與隊列第二篇文章:學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法(二):鏈表第三篇文章:學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法(三):集合第...

    Flink_China 評論0 收藏0
  • JavaScript數(shù)據(jù)結(jié)構(gòu)算法(一) ——

    摘要:棧是一種遵從后進先出原則的有序集合。新添加的或待刪除的元素都保存在棧的末尾。稱作棧頂,另一端就叫棧底。在棧里,新元素都靠近棧頂,舊元素都靠近棧底。提供可操作的方法入棧出棧,但是會移掉棧中的數(shù)據(jù)。 棧是一種遵從后進先出(LIFO)原則的有序集合。新添加的或待刪除的元素都保存在棧的末尾。稱作棧頂,另一端就叫棧底。在棧里,新元素都靠近棧頂,舊元素都靠近棧底。 javascript提供可操作的...

    quietin 評論0 收藏0
  • JavaScript 數(shù)據(jù)結(jié)構(gòu)算法之美 - 內(nèi)存堆內(nèi)存 、淺拷貝深拷貝

    摘要:棧內(nèi)存與堆內(nèi)存淺拷貝與深拷貝,可以說是前端程序員的內(nèi)功,要知其然,知其所以然。棧內(nèi)存與堆內(nèi)存中的變量分為基本類型和引用類型。 showImg(https://segmentfault.com/img/bVbuvnj?w=900&h=250); 前言 想寫好前端,先練好內(nèi)功。 棧內(nèi)存與堆內(nèi)存 、淺拷貝與深拷貝,可以說是前端程序員的內(nèi)功,要知其然,知其所以然。 筆者寫的 JavaScrip...

    dailybird 評論0 收藏0
  • CSS技巧 - 收藏集 - 掘金

    摘要:筆者作為一位,將工作以來用到的各種優(yōu)秀資料神器及框架整理在此,畢竟好記性不如爛鍵盤,此前端知識點大百科全書前端掘金,,不定期更新技巧前端掘金技巧,偶爾更新。計算數(shù)組的極值技巧使你的更加專業(yè)前端掘金一個幫你提升技巧的收藏集。 CSS 樣式畫各種圖形 - 前端 - 掘金下面是一些我在 CSS 中經(jīng)常用到的圖案,還有一些是在css-tricks看到的。記錄一下,以后會用到。會持續(xù)更新… 一、...

    Jonathan Shieber 評論0 收藏0
  • CSS技巧 - 收藏集 - 掘金

    摘要:筆者作為一位,將工作以來用到的各種優(yōu)秀資料神器及框架整理在此,畢竟好記性不如爛鍵盤,此前端知識點大百科全書前端掘金,,不定期更新技巧前端掘金技巧,偶爾更新。計算數(shù)組的極值技巧使你的更加專業(yè)前端掘金一個幫你提升技巧的收藏集。 CSS 樣式畫各種圖形 - 前端 - 掘金下面是一些我在 CSS 中經(jīng)常用到的圖案,還有一些是在css-tricks看到的。記錄一下,以后會用到。會持續(xù)更新… 一、...

    SHERlocked93 評論0 收藏0

發(fā)表評論

0條評論

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