JS数据结构和算法--栈

概念

栈是一种后进先出的数据结构

  1. 其限制是仅允许在一端进行插入和删除。这一端被称为栈顶,另一端称为栈底;
  2. LFO( last in first out)后进入的元素第一个弹出栈空间;
  3. 向—个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;
  4. 从—个栈删除元素又称作岀栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素;

实现

基于数组实现栈:

  • push():添加一个新元素到栈顶
  • pop():移除栈顶元素,返回被移除元素
  • peek():返回栈顶的元素
  • isEmpty():判断是否为空
  • clear():清空栈
  • get size:返回元素个数
class Stack {
  constructor() {
    this.items = []
  }

  // 添加一个新元素到栈顶
  push(el) {
    this.items.push(el)
  }

  // 移除栈顶元素,返回被移除元素
  pop() {
    return this.items.pop()
  }

  // 返回栈顶的元素
  peek() {
    const length = this.items.length
    return length
      ? this.items[length - 1]
      : undefined
  }

  // 判断是否为空
  isEmpty() {
    return this.items.length === 0
  }

  // 清空
  clear() {
    this.items = []
    return true
  }

  // 返回元素个数
  get size() {
    return this.items.length
  }
  
  // toString
  toString() {
    let str = ''
    for (let i = 0; i < this.items.length; i++) {
      const el = this.items[i];
      str += el + ' '
    }
    return str
  }
}

实际应用

实现十进制转二进制?
思路:将十进制数字不断和2相除,保留余数,直到结果取整后为0。将得到的余数从后向前拼接组成二进制数据

// 十进制转二进制
function dec2bin(number) {
  // 实例化栈
  const stack = new Stack()
  
  // 除2取整结果大于0时循环
  while (number) {
    // 余数放到栈中
    stack.push(number% 2)
    // 获取整除的结果
    number= Math.floor(number/ 2)
  }

  // 从后向前拼接栈中数据
  let binStr = ''
  while (!stack.isEmpty()) {
    binStr += stack.pop()
  }
  return binStr
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值