functionmulBase(num, base) { let s = newStack() do { s.push(num % base) num = Math.floor(num / base) } while (num > 0) let res = '' while (s.length() > 0) { res += s.pop() } return res } /* 以 8 转二进制 为例 8 / 2 = 4 余 0 s[0] 4 / 2 = 2 余 0 s[0,0] 2 / 2 = 1 余 0 s[0,0,0] 1 / 2 = 0 余 1 s[0,0,0,1] 进行出栈操作 得到 1000 */
利用栈判断是否为回文串
functionisPalindrome(word) { let s = newStack() for (let i = 0, len = word.length; i < len; i++) { s.push(word[i]) } let reWord = '' while (s.length() > 0) { reWord += s.pop() } return word === reWord ? true : false }
栈操作,还可用于解决递归操作, 拿简单的阶乘做例子
functionfactorial(n) { if (n == 0) { return1 } else { return n * factorial(n - 1) } }
// 采用栈结构 functionfact(n) { let s = newStack() while (n > 1) { s.push(n--) } let res while (s.length() > 0) { res *= s.pop() } return res }
在深度优先查询,也需要采用的栈先进后出的特点
// 深度优先查询 functiondeep(arr, attr) { let dataArr = [...arr] let res while (dataArr.length > 0) { let temp = dataArr.pop() // 数组pop(),尾部删除 if (temp[attr]) { res.push[temp] } let children = temp.children if (children) { for (item of children) { dataArr.push(item) } } } return res }