Mr.ZhaoAbout 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
}