JavaScript实现栈结构

基本规则

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素

手动实现

// 手动实现栈结构,这里使用数组来实现功能
export default class Stack {
  // 元素信息
  items: any[] = [];

  // 压栈方法
  push(value: any) {
    this.items.push(value);
  }
  // 出栈方法: 删除并返回顶部元素
  pop() {
    return this.items.pop();
  }
  // 查看栈顶元素,只是查看
  peek() {
    return this.items[this.items.length - 1];
  }
  // 判断栈结构是否为空
  isEmpty() {
    return this.items.length === 0;
  }
  // 获取栈元素的个数
  size() {
    return this.items.length;
  }
  // toString方法,复杂结构不推荐使用
  toString() {
    let stackString = '';

    for (let i = 0; i < this.items.length; i++) {
      try {
        if (typeof this.items[i] === 'object') {
          // 排除复杂结构对该方法的影响
          throw new Error();
        }
        stackString += this.items[i] + ' ';
      } catch (e) {
        console.error('复杂结构不允许使用该方法');
      }
    }
    return stackString;
  }
}

常见题目

 /**
   * 十进制转化为二进制
   * @param {number} 十进制数字
   * @return {string} 二进制拼接的数组
   */
  const dec2bin = (decNumber: number) => {
    const stack = new Stack();

    // 循环取余
    while (decNumber > 0) {
      // 将每次的结果的余数压入栈中
      stack.push(decNumber % 2);

      // decNumber向下取整
      decNumber = Math.floor(decNumber / 2);
    }

    let binaryString = '';
    while (!stack.isEmpty()) {
      binaryString += stack.pop();
    }
    return binaryString;
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值