基于数组实现栈结构

栈结构:

我们都知道数组是一种线性结构,并且可以在任意位置插入和删除数据。但是有时为了实现某些功能,我们必须对这种任意性加以限制。而栈和队列就是常见的受限的线性结构。

栈是一种受限的线性表,后进先出。其限制是仅允许在表的一端进行插入和删除操作,这一端被称为栈顶,另一端称为栈底。LIFO(last in first out)表示就是后进入的元素,第一个弹出栈空间。向一个栈插入新元素又称为进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素。从一个栈删除元素又称作出栈或退栈,它把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

实现栈结构有两种方式:

        基于数组实现

        基于链表实现

栈的操作:

        push():添加一个新元素到栈顶位置

        pop(): 移除栈顶的元素,并返回被移除的元素

        peek(): 返回栈顶元素,不对栈做任何修改

        isEmpty(): 返回Boolean值,判断栈中是否有元素,没有就返回true,有就返回false

        size(): 返回栈里的元素个数。与数组的length相似

        toString(): 将栈结构中的内容以字符串的形式返回

基于数组实现栈结构:

function Stack() {
  // 栈中的属性
  this.items = []

  // push (这是给每个对象的实例增加方法)(这里不推荐使用)
  // this.push =  (e) =>  {
  //   this.items.push(e)
  // }
  // push (这是给类的原型增加方法,共享给实例)
  Stack.prototype.push =  (e) =>  {
    this.items.push(e)
  }

  // pop
  Stack.prototype.pop =  () => {
    return this.items.pop()
  }

  // peek
  Stack.prototype.peek =  () => {
    return this.items[this.items.length - 1]
  }

  // isEmpty
  Stack.prototype.isEmpty =  () => {
    return this.items.length == 0
  }

  // size
  Stack.prototype.size =  () => {
    return this.items.length
  }

  // toString
  Stack.prototype.toString =  () => {
    let str = ''
    this.items.forEach(item => {
      str += item
    })
    return str
  }
}


 

你可能感兴趣的:(前端,数据结构)