成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

王巖威 / 2875人閱讀

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

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

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

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

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

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

push()  //  添加一個(gè)或多個(gè)新元素到棧頂
pop()  //  移除棧頂元素,同時(shí)返回被移除的元素
peek()  // 僅僅返回棧頂元素,不對(duì)棧做任何修改
isEmpty()  //  如果棧中沒有元素返回true,否則返回false
clear()  // 移除棧中所有元素
size()  // 返回棧中元素的個(gè)數(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)建了一了個(gè)棧 Stack。

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

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

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

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

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/101649.html

相關(guān)文章

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

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

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

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

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

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

    dailybird 評(píng)論0 收藏0
  • CSS技巧 - 收藏集 - 掘金

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

    Jonathan Shieber 評(píng)論0 收藏0
  • CSS技巧 - 收藏集 - 掘金

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

    SHERlocked93 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<