数据结构之栈

355 阅读2分钟

这是我参与更文挑战的第11天,活动详情查看:更文挑战

什么是栈

是一种遵从后进先出(LIFO)原则的有序集合。先添加的或者待删除的元素都保存在栈的末尾,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。 栈也被用在编程语言的编译器和内存中保存变量,方法调用等。

栈的创建

我们先创建一个类来表示栈。

function Stack () {
    // 各种属性和方法的声明
}

使用数组来保存栈里的元素。

function Stack () {
    let items = []
    // 各种属性和方法的声明
}

然后,为栈声明一些方法:

  • push(ele) 添加一个或几个新元素到栈顶。
  • pop() 移除栈顶的元素,同时返回被移除的元素。
  • peek() 返回栈顶的元素,不对栈做任何修改。
  • isEmpty() 如果栈里没有任何元素就返回true,否则返回false。
  • clear() 移除栈里的所有元素。
  • size() 返回栈里的元素个数。类似于数组的length属性。
function Stack () {
    let items = []
    // 各种属性和方法的声明
    this.push = function (ele) {
        items.push(ele)
    }
    this.push = function () {
        return items.pop()
    }
    this.peek = function () {
        return items[items.length - 1]
    }
    this.isEmpty = function () {
        return !items.length
    }
    this.clear = function () {
        items = []
    }
    this.size = function () {
        return items.length
    }
    // 辅助方法 print用于将栈里的元素输出在控制台
    this.print = function () {
        console.log(items.toString())
    }
}

通过上述代码,我们已经简单的实现了一个栈类,那么接下来就是使用啦:

let stack = new Stack()
console.log(stack.isEmpty()) // true

stack.push(5)
stack.push(6)
console.log(stack.peek()) // 8

stack.push(8)
console.log(stack.size()) // 3
console.log(stack.isEmpty()) // false

stack.pop()
console.log(stack.size()) // 2
stack.print() // [5, 6]

在js中的应用

栈内存就是给代码的执行提供一个环境,也叫上下文,它的大小是固定的(存在栈内存溢出的情况);而堆内存是用来存储引用类型值的,比如对象、数组等,它的大小不固定。