在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'));用栈可以实现很多方便的功能,可以见得前端了解数据结构尤为重要。
欢迎评论以及留言,同时欢迎关注我的博客定时不断地更新我的文章