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~

经验分享 程序员 微信小程序 职场和发展