栈结构

155 阅读2分钟

一、认识栈结构

  • 栈也是一种非常常见的数组结构,并且在程序中的应用非常广泛

二、数组

  • 数组是一种线性结构,并且可以在数组的任意位置插入和删除数据,但是有时候,为了实现某些功能,必须对这种任意性进行限制,而栈和队列就是比较常见的受限的线性结构

三、栈结构示意图

只有一个口进出 所以要对最下面的数据删除 首先要把上面的删除

栈,是一种受限的线性表,后进先出

  • 其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。

  • LIFO(last in first out)表示就是后进入的元素,第一个弹出栈空间.类似于自动餐托盘,最后放上的托盘,往往先把拿出去使用.

  • 向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;

  • 从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素.

四、实现栈结构有两种比较常见的方式

  • 基于数组实现

  • 基于链表实现

五、栈常见有哪些操作呢

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

  • pop():移除栈顶的元素,同时返回被移除的元素

  • peek() :返回栈顶的元素,不对栈做任何修改(这个方法不会移除栈顶的元素

  • isEmpty():如果栈里没有任何元素就返回true,否则返回false

  • size():返回栈里元素个数,这个方法跟数组的length很类似

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

六、封装栈结构

function Stack(){
  this.items = []
  // 1.将元素压入到栈
  Stack.prototype.push = function(element){
    this.items.push(element)
  }
  // 2.从栈取出元素
  Stack.prototype.pop = function(){
    return this.items.pop()
  }
  // 3.查看栈顶元素
  Stack.prototype.peek = function() {
    return this.items[this.items.length - 1]
  }
  // 4.判断栈是否为空
  Stack.prototype.isEmpty = function() {
    return this.items.length == 0
  }
  // 5.获取栈中元素的个数
  Stack.prototype.size = function() {
    return this.items.length
  }
  // 6.toString方法
  Stack.prototype.isString = function() {
    let res = ''
    for(let i = 0; i < this.items.length; i++){
      res += this.items[i] + " "
    }
    return res
  }
}