Stack 类 定义

//Stack 定义 function Stack() { var items = []; this.push = function(element){ items.push(element); }; this.pop = function(){ return items.pop(); }; this.peek = function(){ return items[items.length-1]; }; this.isEmpty = function(){ return items.length == 0; }; this.size = function(){ return items.length; }; this.clear = function(){ items = []; }; this.print = function(){ console.log(items.toString()); }; } // 后面的 通过 var newStack = new Stack( ) 来进行使用

进制转换(2-9)

现实生活中,我们主要使用十进制。但在计算科学中,二进制非常重要,因为计算机里的所 有内容都是用二进制数字表示的(0和1)。没有十进制和二进制相互转化的能力,与计算机交流 就很困难。

要把十进制转化成二进制,我们可以将该十进制数字和2整除(二进制是满二进一),直到结 果是0为止。举个例子,把十进制的数字10转化成二进制的数字,过程大概是这样:
//进制转换(2-9) function mulBase ( num , base ) { var s = new Stack(); //这里用 new Array( do{ s.push( num % base ); num = Math.floor( num /= base ); }while ( num > 0 ); var converted = ''; while (s.length> 0){ converted += s.pop(); } return converted; } console.log( mulBase( 125 , 2 ) ); // 1111101 console.log( mulBase( 125 , 8 ) ); // 175
在这段代码里,当结果满足和2做整除的条件时(行{1}),我们会获得当前结果和2的余数, 放到栈里(行{2}、 {3})。然后让结果和2做整除(行{4})。另外请注意: JavaScript有数字类型, 但是它不会区分究竟是整数还是浮点数。因此,要使用Math.floor函数让除法的操作仅返回整 数部分。最后,用pop方法把栈中的元素都移除,把出栈的元素变成连接成字符串(行{5})

回文判断

回文是指一个字符串,从前往后写和从后往前写结果都是一样的,比如单词 'level' , 'racecar',就是回文,数字 1001 也是回文。

我们采用栈,可以很轻松判断一个字符串是否是回文,实现算法很简单,相信你们都猜到了。我们把字符串从左到右依次压入栈,这样,栈中保存了该字符串反转后的字符,我们再依次出栈,通过比较出栈后的字符串是否与原字符串是否相等,就可判断该字符串是否是回文。
//回文判断 function isPalindrome ( word ) { var s = new Stack(); for( var i = 0 ; i < word.length ; i ++ ){ s.push( word[i] ); } var rword='' ; while( s.size()> 0 ){ rword += s.pop(); } if( word == rword ){ return true; }else{ return false; } } console.log( isPalindrome('level') ) // true console.log( isPalindrome('1001') ) // true console.log( isPalindrome('word') ) // false