在javascript中,一些利用本來數組無法輕易解決的問題,其實也是能夠經過模擬數據結構來解決問題的,並不是是說前端就不須要去學數據結構與算法,懂得數據結構的前端纔是真的程序員。下面簡單地用javascript來實現數據結構中的棧結構,棧結構的先入後出性質在解決某些數據問題時頗有用javascript
function Stack() { this.dataStore = []; this.top = 0; this.push = push; this.pop = pop; this.peek = peek; this.clear = clear; this.length = length; }
function push(element) { this.dataStore[this.top++] = element; }
function pop() { return this.dataStore[--this.top] }
function length() { return this.top; }
function clear() { this.top = 0; }
function peek() { return this.dataStore[this.top - 1]; }
下面是一個有趣的例子 利用stack類實現10進制轉換爲其它進制
function mulBase(num, base) { let s = new Stack(); do { s.push(num % base); num = Math.floor(num /= base); } while (num > 0); let content = ''; while (s.length() > 0) { content += s.pop(); } return content; }
將10進制數9轉換爲2進制數1001 print(mulBase(9, 2));
又是一個有趣的例子,用棧來判斷是不是迴文,迴文就是一個字符串,從前日後寫跟從後往前寫都是同樣的 例如'racecar','data'
function isPalindrome(word) { let s = new Stack(); for (let i = 0; i < word.length; i++) { s.push(word[i]); } let rword = ''; while (s.length() > 0) { rword += s.pop(); } if (word == rword) { return true; } else { return false; } }
判斷racecar是不是迴文 print(isPalindrome('racecar'));用棧能夠實現不少方便的功能,能夠見得前端了解數據結構尤其重要。
歡迎評論以及留言,同時歡迎關注個人博客定時不斷地更新個人文章 陳建光的博客前端