栈和队列在内存中不真实存在,而是通过JS代码形式封装出的抽象的内存结构
下面我们来定义一个代表栈类型(构造函数/类)的模块
其内部使用数组实现,并具有以下功能:
push(element): 添加一个或是几个新元素到栈顶
pop(): 移除栈顶的元素,同时返回被移除元素
peek(): 返回栈顶的元素,但并不对栈顶的元素做出任何的修改
size(): 返回栈的元素个数
isEmpty(): 检查栈内是否有元素,如果有返回true,没有返回false
clear(): 清除栈里的元素
ES6和commonjs模块化游览器无法识别,我们使用ES5定义模块使用IIFE
(function (window) {
let arr = []
function Stack() {
}
// push(element): 添加一个或是几个新元素到栈顶
Stack.prototype.push = function (element) {
arr.push(element)
}
// pop(): 移除栈顶的元素,同时返回被移除元素
Stack.prototype.pop = function () {
return arr.pop()
}
// peek(): 返回栈顶的元素,但并不对栈顶的元素做出任何的修改
Stack.prototype.peek = function () {
return arr[arr.length-1]
}
// size(): 返回栈的元素个数
Stack.prototype.size = function () {
return arr.length
}
// isEmpty(): 检查栈内是否有元素,如果有返回true,没有返回false
Stack.prototype.isEmpty = function () {
return arr.length===0
}
// clear(): 清除栈里的元素
Stack.prototype.clear = function () {
arr = []
}
window.Stack = Stack
})(window)