一、栈的概念
栈是一种后进先出(LIFO)
的数据结构,比如生活中桌子上堆放的一叠书,餐厅里面堆放的盘子,这都可以看做是栈结构,它是一种有序集合。新添加的元素或者待删除的元素都保存在栈顶,而另一端是栈底,从这可以看出,我们只能对栈顶操作。
栈有很多用处,比如在内存中保存变量(在JavaScript中保存引用类型的变量)、执行环境栈、浏览器前进后退等。下面我将讲述在JavaScript中如何表示栈。
二、数组实现
根据栈的特性,我们要实现一个Stack
类,这个类有以下方法:
- push(element):向栈顶添加新元素
- pop():删除栈顶元素
- peek():返回栈顶元素
- size():返回栈的长度
- isEmpty():栈是否为空
- clear():清空栈
首先,先创建Stack
类,初始化构造函数:
class Stack {
constructor() {
this.items = []
}
}
入栈(push)
push(element) {
this.items.push(element)
}
出栈(pop)
pop() {
return this.items.pop()
}
返回栈顶元素(peek)
peek() {
return this.items[this.items.length - 1]
}
栈是否为空(isEmpty)
isEmpty() {
return this.items.length === 0
}
清空栈(clear)
clear() {
this.items = []
}
栈的大小(size)
size() {
return this.items.length
}
下面我们创建实例对象stack
来测试:
const stack = new Stack()
const {
log } = console
log(stack.isEmpty()) // true
stack.push(1)
stack.push(2)
stack.push(3)
log(stack.peek()) // 3
log(stack.pop()) // 3
log(stack.size()) // 2