手动封装 JavaScript 栈结构

手动封装 JavaScript 栈结构

Flying
2019-06-26 / 0 评论 / 143 阅读 / 正在检测是否收录...

栈是一个很常用的结构数据,在 Java 等各种后台语言都有实现,但 JavaScript 却没有实现栈结构,本文就带你手动封装栈结构,希望对你有所启发:(胜利)

stack.svg

代码实现

// 栈结构的封装
class Stack {
  constructor() {
    this.items = [];
  }

  // push(item) 压栈操作,往栈里面添加元素
  push(item) {
    this.items.push(item);
  }

  // pop() 出栈操作,从栈中取出元素,并返回取出的那个元素
  pop() {
    return this.items.pop();
  }

  // peek() 查看栈顶元素
  peek() {
    return this.items[this.items.length - 1];
  }

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

  // size() 获取栈中元素个数
  size() {
    return this.items.length;
  }

  // toString() 返回以字符串形式的栈内元素数据
  toString() {
    let result = "";
    for (let item of this.items) {
      result += item + " ";
    }
    return result;
  }
}

我们定义了 pushpoppeekisEmptysizetoString 几个方法,很简单,看看就行了。下面我们来测试验证我们的实现是否正确。

测试验证

let s = new Stack();
// 测试案例:
s.push(20);
s.push(10);
s.push(100);
s.push(77);
console.log(s.toString()); // 打印:20 10 100 77
// 删除两个元素
console.log(s.pop()); // 77
console.log(s.pop()); // 100
//取出栈顶元素
console.log(s.peek()); //1 0
// 是否为空
console.log(s.isEmpty()); //false
// 剩余大小
console.log(s.size()); //2
// 最终打印
console.log(s.toString()); //2

const decTobin = (decNumber) => {
  //1.定义一个栈对象,保存余数
  var stack = new Stack();

  // 2.循环入栈操作
  while (decNumber > 0) {
    // 当除法结果不为零时,入栈添加
    // 2.1.获取余数并放入栈中
    stack.push(decNumber % 2);
    // 2.2.获取整除后的结果作为下一次运算的数字(floor:向下取整)
    decNumber = Math.floor(decNumber / 2);
  }

  // 3.循环出栈操作
  let binaryString = "";
  while (stack.items.length != 0) {
    binaryString += stack.pop();
  }
  return binaryString;
};

// 测试代码
console.log(decTobin(10)); //1010
console.log(decTobin(100)); //1100100
console.log(decTobin(1000)); //1111101000

这个一看就懂吧。

参看实例

访问 Codepen 查看代码及最终效果

1

评论 (0)

取消