一. JS数据结构实现: 栈和队列
1). 栈与队列的理解
栈: 遵循后进先出(LIFO)原则的有序集合。新添加的或是待删除的元素都保存在栈顶,而另一端我们称作栈底。(压栈)
队列: 遵循先进先出(FIFO)原则的有序集合,队列从尾部添加新元素,从顶部移除元素
2). 栈与队列的行为
1. 栈
push(element): 添加一个或是几个新元素到栈顶
pop(): 移除栈顶的元素,同时返回被移除元素
peek(): 返回栈顶的元素,但并不对栈顶的元素做出任何的修改
size(): 返回栈的元素个数
isEmpty(): 检查栈内是否有元素,如果有返回true,没有返回false
clear(): 清除栈里的元素
2. 队列
enqueue(element): 向队列尾部添加一个(或是多个)元素。
dequeue(): 移除队列的第一个元素,并返回被移除的元素。
front(): 返回队列的第一个元素——最先被添加的也是最先被移除的元素。队列不做任何变动。
size(): 返回队列的长度。
isEmpty(): 检查队列内是否有元素,如果有返回true,没有返回false
clear(): 清除队列里的元素
## 3). 自定义栈
(function (window) {
let items = []
function Stack() {
}
Stack.prototype.push = function (el) {
items.push(el)
}
Stack.prototype.pop = function () {
return items.pop();
}
Stack.prototype.peek = function () {
return items[items.length - 1]
}
Stack.prototype.size = function () {
return items.length
}
Stack.prototype.isEmpty = function () {
return items.length === 0
}
Stack.prototype.clear = function () {
items = []
}
Stack.prototype.toString = function () {
return items.toString() + ' ' + 'Stack'
}
window.Stack = Stack
})(window)
4). 自定义队列
(function (window) {
let items = []
function Queue() {
}
Queue.prototype.enqueue = function (el) {
items.push(el)
}
Queue.prototype.dequeue = function () {
return items.shift()
}
Queue.prototype.front = function () {
return items[0]
}
Queue.prototype.size = function () {
return items.length
}
Queue.prototype.isEmpty = function () {
return items.length === 0
}
Queue.prototype.clear = function () {
items = []
}
Queue.prototype.toString = function () {
return items.toString() + ' ' + 'Queue'
}
window.Queue = Queue
})(window)
const obj1 = {}
const obj2 = {}
const obj3 = {}
obj1.next = obj2
obj2.next = obj3