用队列实现栈

2018-12-17  本文已影响7人  ChancePro

思路:每次取值要取队列的队尾元素,数据队列A出队到辅助队列B,留下最后一个元素返回,辅助队列再把元素出队到数据队列。

struct MyStack {
    var queueA: Queue
    var queueB: Queue
    
    init() {
        queueA = Queue()
        queueB = Queue()
    }

    var isEmpty: Bool {
        return queueA.isEmpty && queueB.isEmpty
    }

    var peek: Any? {
        get {
            shift()
            let peekObj = queueA.peek
            queueB.enqueue(queueA.dequeue()!)
            swap()
            return peekObj
        }
    }
    
    var size: Int {
        return queueA.size
    }

    func push(object: Any) {
        queueA.enqueue(object)
    }

    func pop() -> Any? {
        shift()
        let popObject = queueA.dequeue()
        swap()
        return popObject
    }

    private func shift() {
        while queueA.size != 1 {
            queueB.enqueue(queueA.dequeue()!)
        }
    }

    private func swap() {
        (queueA, queueB) = (queueB, queueA)
    }
}
上一篇 下一篇

猜你喜欢

热点阅读