# 栈
栈(英语:stack)又称为堆栈或堆叠,是一种只能在一端进行插入和删除操作的特殊线性表。
它按照后进先出(LIFO)的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。
# 栈的操作
push(element)
:添加新元素到栈顶位置pop()
:移除栈顶的元素,同时返回被移除的元素peek()
:返回栈顶的元素,不对栈做任何修改isEmpty()
:如果栈里没有任何元素就返回true
,否则返回false
clear()
:移除栈里的所有元素size()
:返回栈里的元素个数print()
:打印栈内元素
# 栈的实现
class Stack {
constructor() {
this._list = []
}
push(...items) {
this._list.push(...items)
}
pop() {
return this._list.pop()
}
peek() {
return this._list[this._list.length - 1]
}
size() {
return this._list.length
}
isEmpty() {
return this._list.length === 0
}
clear() {
this._list.length = 0
}
toString() {
this._list.toString()
}
print() {
console.log(this.toString())
}
}
# 栈的使用
利用栈对十进制数字进行任意进制转换:
/**
* 利用栈对十进制数字进行任意进制转换
* @param {number} num 被转换的数
* @param {number} base 基数
*/
function _parseInt(num = 0, base = 10) {
const stack = new Stack()
const digits = '0123456789ABCDEF'
let ret = ''
while (num > 0) {
stack.push(Math.floor(num % base))
num = Math.floor(num / base)
}
while (!stack.isEmpty()) {
ret += digits[stack.pop()]
}
return +ret || 0
}
_parseInt(100, 2) // 1100100