栈:是一种遵循后进先出(Last In First Out / LIFO) 准则的一种有序汇合。

  新增加或者要删除的元素都会保留在栈的同一端,咱们把它叫做栈顶,另外一端叫做栈底。

  在栈中所有的新元素都靠近栈顶,而所有的旧元素都靠近栈底。

1

  在咱们的生存中也有很多相似于栈这种构造的例子:

  咱们将栈视作是一个容器,比方水杯。它只有一个入口和进口就是杯子的顶部(和咱们的栈十分类似)。咱们向杯子中放入5块同杯子直径大小的饼干,全副放入后咱们开始取出饼干。大家会发现 你最先取出的饼干是最初放入的那块,正好也就合乎了咱们栈的特点(LIFO)

  在编程世界中栈也被用来保留变量、办法调用等性能,也被用于浏览器的游戏历史记录(比方浏览器的返回按钮)。

  那么上面咱们就应用JavaScript的类来创立一个咱们的栈。

  class Stack{

  constructor(){

  this.items = [];

  }

  }

  咱们须要一种形式来保留咱们栈中的数据,从下面的代码能够看到,我这边抉择的是数组。然而数组容许咱们在任何地位增加或者删除元素,咱们须要给元素增加和删除的地位有一个束缚,让咱们的数组可能遵循 后进先出(LIFO) 的准则。所以接下来须要给咱们的栈再增加一些办法。

  // 咱们要实现的第一个性能是向栈中增加新元素

  // 并且增加的新元素只能放再栈的顶部(也就是数组的尾部)

  push(element) {

  this.items.push(element);

  }

  // 应为数组的push办法也是将新元素增加到数组的尾部,所以应用数组push办法来实现

  // 当初咱们来为栈增加一个移除元素的办法

  // 栈构造是遵循LIFO的准则,素以移除的元素是最初增加进去的元素

  pop() {

  return this.items.pop();

  }

  // 咱们应用数组的push和pop两个函数就能够实现了在www.sangpi.com之后进先出的准则 // 持续为栈增加一些辅助性能// peek办法用于查看栈顶的元素

  peek() {

  return this.items[this.items.length - 1];

  }

  // isEmpty办法用于查看栈是否为空

  isEmpty() {

  return !this.items.length;

  }

  // clear办法用于清空栈

  clear() {

  this.items = [];

  }

  // size办法用于查看栈中元素的数量

  size() {

  return this.items.length;

  }

  以上代码就曾经实现了咱们栈的性能。 接下来咱们把它整顿到一起来看一下。

  class Stack {

  constructor() {

  this.items = [];

  }

  push(element) {

  this.items.push(element);

  }

  pop() {

  return this.items.pop();

  }

  peek() {

  return this.items[this.items.length - 1];

  }

  isEmpty() {

  return !this.items.length;

  }

  clear() {

  this.items = [];

  }

  size() {

  return this.items.length;

  }

  }

  接下来就能够应用咱们的 Stack 了

  // 咱们先来创立一个栈验证一下是否为空

  const stack = new Stack(); // 新建一个栈

  console.log(stack.isEmpty()); // true

  // 持续向栈中增加2个元素

  stack.push('hello');

  stack.push('world');

  // 此时咱们调用peek办法查看栈顶的元素

  console.log(stack.peek()); // 'world'

  // 调用size办法查看一下元素的数量

  console.log(stack.size()) // 2

  // 持续向栈中增加元素

  stack.push('.');

  stack.push('JavaScript');

  // 移出一个元素

  console.log(stack.pop()); // 'JavaScript'

  // 清空栈

  stack.clear();

  console.log(stack.size()); // 0

  console.log(stack.isEmpty()); // true

  最初,还有一些业余词汇心愿大家可能把握:

  向栈中增加元素: 咱们能够称其为 入栈、压栈、压入

  从栈中移除元素: 咱们能够称其为 出栈、弹出

  心愿以上的分享能帮到大家。