[数据结构] 栈


二、栈

  栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。栈被称为一种后入先出(LIFO,last-in-first-out)的数据结构。

  由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问。为了得到栈底的元 素,必须先拿掉上面的元素。

  对栈的两种主要操作是将一个元素压入栈和将一个元素弹出栈。入栈使用 push() 方法,出 栈使用 pop() 方法(调用了pop方法后,栈顶元素也从栈中被永久性地删除了),想要预览栈顶元素可以使用peek()方法,该方法只会返回栈顶元素,而不会删除它。

  

// 定义一个push方法
function push(element) {
  this.dataStore[this.stackSize++] = element;
  return this;  // 此处return this,等于retern的是实例对象,以便后面链式操作
}

function pop() {
  this.stackSize--;  // 数组里的元素弹出后,栈的长度应该对应-1
  return this.dataStore.pop();  // 操作数组,弹出并删除栈顶元素
}
function  peek() {
  return this.dataStore[this.stackSize-1];  // 返回栈顶元素
}

function clear() {
  this.stackSize = 0; // 同时让栈大小等于0
  this.dataStore = [];  // 清空栈元素
}

function Stack() {
    this.stackSize = 0;
    this.dataStore = [];
    this.pop = pop;
    this.push = push;
    this.peek = peek;
    this.clear = clear;
}

const  s = new Stack();
s.push(1).push(2).push(3).push(4).push(5); // 链式调用,每调用一次返回的还是s这个实例对象
console.log(s);
/* 返回值
Stack {
  stackSize: 5,
  dataStore: [ 1, 2, 3, 4, 5 ],
  pop: [Function: pop],
  push: [Function: push],
  peek: [Function: peek] }
* */

let p = s.pop();
console.log(p); // 5
console.log(s);
/* 返回值
Stack {
  stackSize: 4,
  dataStore: [ 1, 2, 3, 4],
  pop: [Function: pop],
  push: [Function: push],
  peek: [Function: peek] }
* */

let k = s.peek();
console.log(k); // 4
console.log(s);
/* 返回值
Stack {
  stackSize: 4,
  dataStore: [ 1, 2, 3, 4],
  pop: [Function: pop],
  push: [Function: push],
  peek: [Function: peek] }
* */

s.clear();
console.log(s);
/* 返回值
Stack {
  stackSize: 0,
  dataStore: [],
  pop: [Function: pop],
  push: [Function: push],
  peek: [Function: peek] }
* */
原文地址:https://www.cnblogs.com/mailyuan/p/11949550.html