javascript语言实现基础的数据结构系列
——01 栈
- 方法:
-
push 传入一个或几个元素到栈顶
-
pop 删除栈顶的一个元素
-
peek 返回栈顶元素,不修改栈
-
isEmpty 栈是否为空
-
clear 清除所有元素
-
size 栈的元素个数
基于数组实现栈
/**
* 栈
*
* 基于数组
*
* 方法:
* push 传入一个或几个元素到栈顶
* pop 删除栈顶的一个元素
* peek 返回栈顶元素,不修改栈
* isEmpty 栈是否为空
* clear 清除所有元素
* size 栈的元素个数
*/
class myStack {
constructor() {
this.items = []
}
push(element) {
this.items.push(element)
}
pop() {
return this.items.pop()
}
peek() {
if (!this.items.length) {
return null
}
else {
return this.items[this.items.length - 1]
}
}
isEmpty() {
return this.items.length === 0
}
clear() {
this.items = []
}
size() {
return this.items.length
}
}
基于对象实现栈
因为数组需要基于索引维护栈元素的有序,而且数组的一些方法消耗更多的时间资源,所以使用对象再实现一下
/**
* 栈
*
* 基于对象 (时间、空间复杂度更小,因为底层要保证数组元素按照index有序)
*
* 方法:
* push 传入一个或几个元素到栈顶
* pop 删除栈顶的一个元素
* peek 返回栈顶元素,不修改栈
* isEmpty 栈是否为空
* clear 清除所有元素
* size 栈的元素个数
*/
class myStack {
constructor() {
this.items = {}
this.count = 0 // 模拟index
}
push(element) {
this.items[this.count] = element
this.count++
}
pop() {
if (this.isEmpty()) {
return null
}
this.count--
const res = this.items[this.count]
delete this.items[this.count]
return res
}
peek() {
if (!this.isEmpty()) {
return null
}
else {
return this.items[this.count - 1]
}
}
isEmpty() {
return this.count === 0
}
clear() {
this.items = {}
this.count = 0
}
size() {
return this.count
}
}