位置:首頁 > 軟件操作教程 > 編程開發(fā) > JavaScript > 問題詳情

JavaScript 棧操作

提問人:劉團(tuán)圓發(fā)布時(shí)間:2020-11-25

■知識(shí)點(diǎn)

    使用pushO和p0p()方法可以在數(shù)組尾部執(zhí)行操作。其中pushO方法能夠把一個(gè)或多個(gè)參數(shù)值附加到數(shù)組的尾部,并返回添加元素后的數(shù)組長(zhǎng)度。pop()方法能夠刪除數(shù)組中最后一個(gè)元素,并返回被刪除的元素。

    棧遵循先進(jìn)后出、后進(jìn)先出原則。類似的行為在生活中比較常見,如僉放物品,疊在上面的總是先使用,還有彈夾中的子彈,以及文本框中輸入和刪除字符操作等。

■實(shí)例設(shè)計(jì)

下面運(yùn)用棧運(yùn)算來設(shè)計(jì)一個(gè)進(jìn)制轉(zhuǎn)換的問題。定義一個(gè)函數(shù),接收十進(jìn)制數(shù)字,然后返回一個(gè)二進(jìn)制的字符串表示。

【設(shè)計(jì)思路】

    把十進(jìn)制數(shù)字轉(zhuǎn)換為二進(jìn)制值,實(shí)際上就是把數(shù)字與2進(jìn)行取余,然后再使用相除結(jié)果與2繼續(xù)取余。在運(yùn)算過程中把每次的余數(shù)推入棧中,最后再出棧組合為字符串即可。

    例如,把10轉(zhuǎn)換為二進(jìn)制的過程為:10/2 = 5余0, 5/2 = 2余1,2/2=1余0,1小于2余1,進(jìn)棧后為: 0101,出找后為:1010,即10轉(zhuǎn)換為二進(jìn)制的值為1010。 

【實(shí)現(xiàn)代碼】

function d2b (num) {

    var a = [] , r, b = '';             //a為棧,r為余數(shù),b為二進(jìn)制字符串

    while (num>0) {                     //逐步求余

        r = Math.floor(num % 2);        //獲取余數(shù)

        a.push (r);                     //把余數(shù)推入棧中

        num = Math.floor(num / 2);      //獲取相除后整數(shù)部分值,準(zhǔn)備下一步求余

    }

    while (a.length) {                  //依次出棧,然后拼接為字符串

    b += a.pop () .toString ();

    }

    return b;                           //返回二進(jìn)制字符串

}

【應(yīng)用代碼】

console.log( d2b(59));                 //返回 111011

console.log( (59).toString(2)) ; //返回 111011

    十進(jìn)制轉(zhuǎn)二進(jìn)制時(shí),余數(shù)是0或1;同理十進(jìn)制轉(zhuǎn)八進(jìn)制時(shí),余數(shù)是0到7的整數(shù);十進(jìn)制轉(zhuǎn)十六進(jìn)制時(shí),余數(shù)為0到9之間的數(shù)字加上A、B、C、D、E、F(對(duì)應(yīng)10、11、12、13、14和15),因此,還需要對(duì)棧中的數(shù)字做轉(zhuǎn)化。

繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部