JavaScript 棧操作
■知識(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)化。
點(diǎn)擊加載更多評(píng)論>>