看到书上用链表实现栈,然后实现栈的逆序,感觉看不懂,也很麻烦
自己用数组实现栈,写了一个栈的逆序
// 用数组实现栈,方便一点
function Stack () {
this.stuckArr = []
}
Stack.prototype = {
push (e) {
this.stuckArr.push(e)
},
pop (e) {
return this.stuckArr.pop()
},
show () {
console.log(this.stuckArr)
},
getBottom (bottom) { // 获取栈底元素,并将其移出栈
// 递归pop顶部元素,只有一个元素了,那个“顶部元素就是”底部元素,此时就不push回去了,而是return回上层函数,其余的push回去,最后该函数的调用就会返回底部元素,并且实现了抽出底部元素
if (this.stuckArr.length === 0) return false
var top = this.pop(), bottom
if (this.stuckArr.length === 0) {
var bottom = top
return bottom
} else {
bottom = this.getBottom(bottom)
this.push(top)
}
return bottom
},
moveBottomToTop () { // 把栈底元素移动到栈顶
var bottom = this.getBottom()
this.push(bottom)
},
reverse () { // 通过递归调用reverse函数,每次都抽出底部元素,抽完了,再递归push回去就实现了逆序
var bottom = this.getBottom()
if (! bottom) return
this.reverse()
this.push(bottom)
}
}
var stack = new Stack()
stack.push(1)
stack.push(2)
stack.push(3)
stack.show()
// stack.moveBottomToTop()
stack.reverse()
// console.log(stack.getBottom())
stack.show()