上面总结的比较简短,我们结合代码来做进一步解释。
1 栈
我们先看一张图,
栈是一种LIFO(Last-In-First-Out,后进先出)的数据结构,也就是最新添加的项最早被移除。而栈中项的插入(叫做推入)和移除(叫做弹出),只发生在一个位置,那就是栈的顶部。
最开始栈中不含有任何数据,叫做空栈,此时栈顶就是栈底。然后数据从栈顶进入,栈顶栈底分离,整个栈的当前容量变大。数据出栈时从栈顶弹出,栈顶下移,整个栈的当前容量变小。
比如我们有一个书箱子,里面堆满了书。最下面的书,肯定是最早放进去的,如果你想拿最下面的书,你只能从上面一本一本拿出来,这就是栈。
JavaScript数组提供了内置方法,可以实现类似出栈入栈的功能,入栈push()、 出栈pop();
创建list
let arr = []
复制
入栈
arr.push(1, 2, 3, 4)
复制
出栈
arr.pop()
复制
封装方法,实现栈结构
function Stack (){ let items = [] this.push = function(element){ items.push(element) } this.pop = function(){ return items.pop() } this.peek = function(){ return items[items.length - 1] } this.isEmpty = function(){ return items.length === 0 } this.size = function(){ return items.length } this.clear = function(){ items = [] } this.print = function(){ console.log(items.toString()) } }
复制
ES6方式实现
class Stack { constructor() { this.items = []; } push(element) { this.items.push(element) } pop() { return this.items.pop() } peek() { return this.items[items.length - 1] } isEmpty() { return this.items.length === 0 } size() { return this.items.length } clear() { this.items = [] } print() { console.log(this.items.toString()) } }
复制
2 列队
我们还是先看一张图,
队列是一种FIFO(Fist-In-First-Out,先进先出)的数据结构,队列在列表的末端添加项,从列表的前端移除项。就好像排队买票,取餐,先来的,最先买票,取餐。
JavaScript数组提供了内置方法,可以实现列队的功能,入队unshift()、 出队pop();
创建list
let arr = []
复制
入队
arr.unshift(1)
复制
出队
arr.pop()
复制
封装方法,实现列队结构
function Queue () { let items = [] this.unshift = function (element) { items.unshift(element) } this.pop = function () { return items.pop() } this.peek = function () { return items[items.length - 1] } this.isEmpty = function () { return items.length === 0 } this.size = function () { return items.length } this.clear = function () { items = [] } this.print = function () { console.log(items.toString()) } }
复制
ES6方式实现
class Queue { constructor() { this.items = []; } unshift(element) { this.items.unshift(element) } pop() { return this.items.pop() } peek() { return this.items[items.length - 1] } isEmpty() { return this.items.length === 0 } size() { return this.items.length } clear() { this.items = [] } print() { console.log(this.items.toString()) } }