數據結構與算法JavaScript描述——棧的使用
阿新 • • 發佈:2017-07-20
相等 script nbsp 彈出 images 互轉 數字轉換 dad 反轉 有一些問題特別適合用棧來解決。本節就介紹幾個這樣的例子。
1) 數制間的相互轉換
可以利用棧將一個數字從一種數制轉換成另一種數制。假設想將數字n 轉換為以b 為基數的數字,實現轉換的算法如下。
使用棧,在JavaScript 中實現該算法就是小菜一碟。下面就是該函數的定義,可以將數字轉化為二至九進制的數字:
回文是指這樣一種現象:一個單詞、短語或數字,從前往後寫和從後往前寫都是一樣的。
比如,單詞“dad”、“racecar”就是回文;如果忽略空格和標點符號,下面這個句子也是回文,“A man, a plan, a canal: Panama”;數字1001 也是回文。
使用棧,可以輕松判斷一個字符串是否是回文。
我們將拿到的字符串的每個字符按從左至右的順序壓入棧。當字符串中的字符都入棧後,棧內就保存了一個反轉後的字符串,最後的字符在棧頂,第一個字符在棧底。
字符串完整壓入棧內後,通過持續彈出棧中的每個字母就可以得到一個新字符串,該字符串剛好與原來的字符串順序相反。我們只需要比較這兩個字符串即可,如果它們相等,就是一個回文。
代碼:
//============================使用Stack類==================================== /** * 1.數制間的相互轉換 */ functionView CodemulBase(num, base){ var s = new Stack(); do{ s.push(num % base); num = Math.floor(num / base); }while (num > 0); var converted = ""; while(s.length() > 0){ converted += s.pop(); } return converted; } //下面展示了如何使用該方法將數字轉換為二進制和八進制數。 var num = 32;var base = 2; var newNum = mulBase(num, base); console.log(num + " converted to base " + base + " is " + newNum); num = 125; base = 8; var newNum = mulBase(num, base); console.log(num + " converted to base " + base + " is " + newNum);
打印如下:
2)回文
//============================使用Stack類==================================== /** * 2.判斷給定字符串是否是回文 */ function isPalindrome(word){ var s = new Stack(); for(var i=0; i<word.length; ++i){ s.push(word[i]); } var rword = ""; while(s.length() > 0){ rword += s.pop(); } if(word == rword){ return true; }else{ return false; } } //測試代碼: var word = "hello"; if (isPalindrome(word)) { console.log(word + " is a palindrome."); }else { console.log(word + " is not a palindrome."); } word = "racecar"; if (isPalindrome(word)) { console.log(word + " is a palindrome."); }else { console.log(word + " is not a palindrome."); }View Code
打印:
3)遞歸演示 這裏只用棧來模擬遞歸過程。 為了演示如何用棧實現遞歸,考慮一下求階乘函數的遞歸定義。首先看看5 的階乘是怎麽定義的: 5! = 5×4×3×2×1 = 120 下面是一個遞歸函數,可以計算任何數字的階乘: 使用棧來模擬計算5! 的過程,首先將數字從5 到1 壓入棧,然後使用一個循環,將數字挨個彈出連乘,就得到了正確的答案:120。 代碼://============================使用Stack類==================================== /** * 3. 使用棧模擬遞歸過程 */ function fact(n){ var s = new Stack(); while(n > 1){ s.push(n--); } var product = 1; while(s.length() > 0){ product *= s.pop(); } return product; } console.log(fact(5)); // 顯示120View Code
數據結構與算法JavaScript描述——棧的使用