两个栈 实现一个队列

请用两个栈,实现一个队列

队列:

 概念:先进先出

 api : add delete length

两个栈 实现一个队列_第1张图片

 队列是逻辑结构,抽象模型

简单的,可以用数组、链表实现

复杂的队列服务,需要单独设计

// 思路 

1 定义一个原型对象  里面包涵  add    delete   length  

2.  出列的时候要: 先进先出   

/**

 * 两个栈  一个队列

 */

export class myQueue{

    private stack1:number[] = []

    private stack2:number[] = []

    add(n:number){

        this.stack1.push(1)

    }

    delete():number | null{

        let res

        const stack1 = this.stack1

        const stack2 = this.stack2

        // 将stack1所有元素移动到stack2中

        while(stack1.length){

            const n = stack1.pop()

            if(n != null){

                stack2.push(n)

            }

        }

        res = stack2.pop()

        // 将stack2中的元素返回给stack1

        while(stack2.length){

            const n = stack2.pop()

            if(n != null){

                stack1.push(n)

            }

        }

        return res || null

    }

    get length ():number{

        return this.stack1.length

    }

}

时间复杂度 add O(1)  \delete O(n)

空间复杂度整体是O(n)

你可能感兴趣的:(算法题,前端)