js数据结构和算法---- 栈
栈的作用:在编程语言的 编译器 和 内存 中保存变量 、方法调用
1. 栈是一种后进先出的数据结构 2. 最下面的叫栈底, 最上面的叫栈顶 3. 进 叫 入栈,出 叫 出栈 4. 进 ----> push() 出 -----> pop() 检查栈顶元素 -----> peek() 是否为空 ------> isEmpty() 清空栈 -----> clear() 栈元素个数 -----> size() 5. 一个数组,第一个元素是栈底,最后一个元素是栈顶~
const Stack = function() { var items = [] // 入栈 this.push = function (elem) { items.push(elem) } // 得到栈 this.getItems = function () { return items } // 出栈 移除栈顶元素 this.del = function () { return items.pop() // 拿出出栈出来的元素 } // 栈的长度 this.getlength = function () { return items.length } // 清空栈 this.clear = function() { return items = [] } // 得到栈顶元素 this.peek = function () { return items[items.length - 1] } // 判断栈是否为空 this.isEmpty = function () { return items.length === 0 // 不用if!! } } var a = new Stack() /* 使用 a.del() a.push(1) a.getItems() a.del() a.getlength() a.clear() a.peek() a.isEmpty() */
例:十进制转化二进制
var TentoTwo = function(num ,base) { var stack = new Stack() var remainder; var integer; while(num > 0) { integer = Math.floor(num / base) // 取整数 remainder = num % base // 取余数 stack.push(remainder) num = integer // 整数再继续除 base } // 获取栈顶元素 while(!stack.isEmpty()){ str += stack.del() } return str; } var result = TentoTwo(10,2) // 10转化成2进制 console.log(result) // 1010
简化一下以及增加判空处理~
var TentoTwo = function(num ,base) { var stack = new Stack() while(num > 0) { stack.push(num % base) // 取余数放栈里 num = Math.floor(num / base) // 整数再继续除 base } // 获取栈顶元素 while(!stack.isEmpty()){ str += stack.del() } return str; } var result = TentoTwo(10,2) // 10转化成2进制 console.log(result) // 1010
例2: 判断一个字符串是否是回文
思路:将字符串存入栈中。这时候最后一个字符在栈顶,然后再出栈,对比出栈和原始的结果
var isPalindHome = function (str) { var stack = new Stack() for (var i = 0; i< str.length ; i++) { stack.push(str[i]) } var reserve = while(stack.getlength() > 0) { reserve += stack.del() } return reserve === str } var result = isPalindHome(1001) console.log(result)
all~