今天看啥  ›  专栏  ›  ChancePro

用队列实现栈

ChancePro  · 简书  ·  · 2018-12-17 17:54

思路:每次取值要取队列的队尾元素,数据队列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)
    }
}



原文地址:访问原文地址
快照地址: 访问文章快照