跳转到内容
返回

《学习JavaScript数据结构与算法》笔记---栈

本文源码 这里

概念
栈的特点就是后进先出。栈有栈顶和栈底的概念。用数组举例子,数组第一个位置这边就是栈底,最后一个元素的位置就是栈顶,新添加的元素保存在栈顶,在 js中基本数据类就是存储在栈中。 数组模拟就是给数组尾部添加元素,移除元素也是从数组尾部移除。

示例图

创建一个栈
function Stack() {
  /*通过数组来保存栈的元素*/
  let item = [];
}
给栈添加一些方法
  1. push 添加一个或几个元素到栈顶
  2. pop移除并返回栈顶的元素
  3. isEmpty 判断栈是不是空的
  4. clear 清空栈内的元素
  5. size返回栈内元素个数
  6. peek返回栈顶的元素
实现
function Stack() {
  // 通过数组保存栈的元素
  let item = [];
  this.push = function (val) {
    return item.push(val);
  };
  this.pop = function (val) {
    return item.pop(val);
  };
  this.isEmpty = function (val) {
    return item.length == 0;
  };
  this.clear = function () {
    item = [];
  };
  this.size = function () {
    return item.length;
  };
  this.peek = function () {
    return item[item.length - 1];
  };
  this.print = function () {
    for (let i = item.length - 1; i >= 0; i--) {
      console.log(item[i]);
    }
  };
}

ES6版本

class Stack {
  item = [];
  constructor() {}
  push(val) {
    return this.item.push(val);
  }
  print() {
    for (let i = this.item.length - 1; i >= 0; i--) {
      console.log(this.item[i]);
    }
  }
  pop(val) {
    return this.item.pop(val);
  }
  isEmpty(val) {
    return this.item.length == 0;
  }
  clear() {
    this.item = [];
  }
  size() {
    return this.item.length;
  }
  peek() {
    return this.item[this.item.length - 1];
  }
}

demo 做一个10进制和其他进制的转换

/*有两个参数 第一个参数要转换的数字 第二个参数是要转换成的进制*/
function conversion(num, type) {
  while (num / type) {
    stack.push(num % type);
    // 确保每次计算后都是整数
    num = parseInt(num / type);
  }
  stack.print();
  // 处理完成后对栈进行清除
  stack.clear();
}


上一篇
《学习JavaScript数据结构与算法》笔记---队列
下一篇
hexo常用配置和命令
×