用队列实现栈
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)
}
}