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~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值