swift用栈实现队列

2019-10-15  本文已影响0人  前年的邂逅_Jerry
class ViewController: UITableViewController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        var stack = IntegerStack()
        var queue = MyQueue()
        queue.enqueue(1)
        queue.enqueue(2)
        queue.enqueue(3)
        queue.enqueue(4)
        queue.enqueue(5)
        queue.enqueue(6)
        
        print(queue.dequeue())
        print(queue.dequeue())
        print(queue.dequeue())
        print(queue.dequeue())
        print(queue.dequeue())
        print(queue.dequeue())
        print(queue.dequeue())
        print(queue.dequeue())
    }
}
struct MyQueue {
    var stackA = IntegerStack()
    var stackB = IntegerStack()
    /// 入队
    func enqueue(_ val : Int) -> Void {
        stackA.push(val)
    }
    //出队
    func dequeue() -> Int? {
        shift()
        return stackB.pop()
    }
    /// 交换栈数据
    func shift() {
        if stackB.isEmpty{
            while (!stackA.isEmpty){
                if let element = stackA.pop() {
                    stackB.push(element)
                }
            }
        }
    }
}
protocol Stack {
    associatedtype Element
    var isEmpty : Bool {get}
    var size : Int {get}
    //栈顶元素
    var peek : Element?{get}
    
     func push(_ newElement : Element)
    
     func pop() -> Element?
}
class IntegerStack : Stack {
    typealias Element = Int
    
    var isEmpty: Bool{
        return stack.isEmpty
    }
    
    var size: Element{
        return stack.count
    }
    
    var peek: Element?{
        return stack.last
    }
    
     func push(_ newElement: Element) {
        stack.append(newElement)
    }
    
     func pop() -> Element? {
        return stack.popLast()
    }
    
    var stack = [Element]()
}



上一篇 下一篇

猜你喜欢

热点阅读