栈
About 1 min
1. 认识栈结构
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素
特点:后进先出即Last in First Out(LIFO)
2. 用数组表示
JavaScript中没有栈,但可以使用Array实现栈的所有功能
常用操作:
入栈:push
出栈:pop
栈顶元素:stack[stack.length - 1]
3. 封装栈结构
//push 添加一个元素到栈顶
//pop 出栈
//peek 返回栈顶
//isEmpty()
//clear()
//size()
//toString()
class Stack {
#items = []
pop() {
return this.#items.pop()
}
push(data) {
this.#items.push(data)
}
peek() {
//return this.#items[this.#items.length - 1]
return this.#items.at(-1)
}
isEmpty() {
return this.#items.length === 0
}
size() {
return this.#items.length
}
clear() {
this.#items = []
}
toString() {
return this.#items.join('')
}
}
//使用
let stack = new Stack()
4. 应用
进制转换:
function convert(decNumber, base) {
let remStack = new Stack()
let number = decNumber
let string = ''
let baseString = '0123456789ABCDEF'
while (number > 0) {
remStack.push(number % base)
number = Math.floor(number / base)
}
while (!remStack.isEmpty()) {
string += baseString[remStack.pop()]
}
return string
}
