栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
栈通常的操作:
stack() // 创建一个空的栈对象
push() // 入栈操作,将元素放至栈顶
pop() // 出栈操作,将栈顶元素移除并返回
peek() // 返回栈顶元素,不对栈做出操作
isEmpty() // 判断栈是不是为空
size() // 返回栈的元素个数
使用javascript模拟栈的实现:
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())
}
this.toString = function () {
return items.toString()
}
}
用栈解决进制数转换问题:
function divide (num, base) {
// num为需要转换的数, base为要转换的基数
let remStack = new Stack(),
rem,
remString = ''
while (num > 0) {
rem = Math.floor(num % base)
remStack.push(rem)
num = Math.floor(num / base)
}
while (!remStack.isEmpty()) {
remString += remStack.pop()
}
return remString
}
console.log(divide(18,16))
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。