美文网首页
通过两个数组实现队列

通过两个数组实现队列

作者: leejnull | 来源:发表于2020-01-08 22:32 被阅读0次

使出栈和入栈的时间复杂度都为O(1)

protocol Queue {
    associatedtype Element
    mutating func enqueue(_ newElement: Element)
    mutating func dequeue() -> Element?
}
struct FIFOQueue<Element>: Queue {
    private var left: [Element] = []
    private var right: [Element] = []
    
    /// 将元素添加到队列最后
    /// - 复杂度:O(1)
    /// - Parameter newElement: Element
    mutating func enqueue(_ newElement: Element) {
        right.append(newElement)
    }
    
    /// 从当前队列前端移除一个元素
    /// 当队列为空时,返回nil
    /// - 复杂度:平摊 O(1)
    mutating func dequeue() -> Element? {
        if left.isEmpty {
            left = right.reversed()
            right.removeAll()
        }
        return left.popLast()
    }
}

就和数组的扩容一样,扩容的操作并不是时刻发生,它的频率是低频的,平摊下来接近于O(1)这里的将 right 数组 reversed 到 left 数组,虽然是 O(n) 的操作,但是队列入栈和出栈的频次是完全高于 reversed 的,所以平摊复杂度是 O(1)

来自 https://leejnull.github.io/2019/12/30/2019-12-30-01/

相关文章

  • 通过两个数组实现队列

    使出栈和入栈的时间复杂度都为O(1) 就和数组的扩容一样,扩容的操作并不是时刻发生,它的频率是低频的,平摊下来接近...

  • 1.数组队列

    数组实现单队列 数组实现循环队列

  • 数组实现queue

    队列最大的特点就是先进先出,主要的两个操作是入队和出队。用数组实现的叫顺序队列,用链表实现的叫链式队列。在数组实现...

  • 数据结构——栈和队列

    用数组实现栈和队列 用栈实现队列 用队列实现栈 栈和队列的经典算法题最小间距栈宠物收养所 数组实现栈和队列 用数组...

  • Java数组实现循环队列

    Java数组实现循环队列 上一节(Java实现队列——顺序队列、链式队列)我们使用数组实现了顺序队列,但是在tai...

  • 剑指Offer——用两个栈来实现队列和旋转数组的最小数字

    用两个栈来实现队列 两个栈来实现一个队列github地址 旋转数组的最小数字 旋转数组的最小数字github地址

  • 数据结构java描述

    接口 栈 队列 集合 并查集 映射 数组 链表 栈 数组实现 链表实现 队列 数组实现 链表实现 二分搜索树 集合...

  • 用数组实现栈、队列

    用数组实现一个栈 用数组实现一个队列 用单链表实现给队列

  • 队列

    基于数组的循环队列 Java实现 基于链表的队列实现 Java实现

  • 循环队列的Java实现

    用数组实现循环队列,循环队列的难点在于头节点和尾节点的判断,判队列已经满了是通过(tail + 1)% n == ...

网友评论

      本文标题:通过两个数组实现队列

      本文链接:https://www.haomeiwen.com/subject/mpreactx.html