美文网首页
队列与循环队列

队列与循环队列

作者: Breezes | 来源:发表于2021-12-22 16:13 被阅读0次

普通队列

public class Queue<T> {
    public var list: [T]
    private var front: Int
    private var rear: Int
    private var size: Int

    public init(_ count: Int) {
        size = count+1
        list = [T](repeating: 0 as! T, count: count)
        front = 0
        rear = 0
    }

    public func enQueue(item: T) {
        if full() {
            return
        }
        list[rear] = item
        rear += 1
    }
    
    public func deQueue() -> T? {
        if empty() {
            return nil
        }
        let temp = list[front]
        front += 1
        return temp
    }
    
    public func empty() -> Bool {
        return front == rear
    }
    
    public func full() -> Bool {
        return rear == size-1
    }
    
    public func count() -> Int {
        return rear - front
    }
}

循环队列

普通队列会造成假溢出的问题,使用循环队列解决该问题,具体问题分析看这里
leetcode 641. 设计循环双端队列

class CircularDeque {

    public var capacity: Int
    private var deque: [Int]
    private var front: Int
    private var rear: Int
    
    init(_ k: Int) {
        capacity = k + 1 //牺牲一个空间,方便判断是否满队列 (rear + 1) % capacity = front
        deque = [Int](repeating: 0, count: capacity)
        front = 0
        rear = 0
    }
    
    func insertFront(_ value: Int) -> Bool {
        if isFull() {return false}
        front = (front - 1 + capacity) % capacity
        deque[front] = value
        return true
    }
    
    func insertLast(_ value: Int) -> Bool {
        if isFull() {return false}
        rear = (rear + 1) % capacity
        deque[rear] = value
        return true
    }
    
    func deleteFront() -> Bool {
        if isEmpty() {return false}
        front = (front + 1) % capacity
        return true
    }
    
    func deleteLast() -> Bool {
        if isEmpty() {return false}
        rear = (rear - 1 + capacity) % capacity
        return true
    }
    
    func getFront() -> Int {
        if isEmpty() {return -1}
        return deque[front]
    }
    
    func getRear() -> Int {
        if isEmpty() {return -1}
        return deque[(rear - 1 + capacity) % capacity] //取尾部时,需要向后移动一下取,因为rear指针总是指向最后一个值的下一个指针
    }
    
    func isEmpty() -> Bool {
        return front == rear
    }
    
    func isFull() -> Bool {
        return (rear + 1) % capacity == front
    }
}

相关文章

  • 队列与循环队列

    普通队列 循环队列 普通队列会造成假溢出的问题,使用循环队列解决该问题,具体问题分析看这里[https://git...

  • 队列

    队列特性 对比队列和栈 基于数组的队列 对比队列学习循环队列 循环队列难点 阻塞队列 并发队列 应用:线程池中拒绝...

  • C++ 数据结构与算法 栈,队列,链式队列,循环队列

    栈 队列 链式队列 4 . 循环队列

  • 有关“队列”的总结

    队列 定义 分类 链式队列 (用链表实现) 静态队列 (用数组实现)图静态队列通常都必须是循环队列循环队列的讲解:...

  • 队列

    顺序存储结构队列 循环队列 链队列

  • 数据结构入门——大师:queue(二) LoopQueue

    1.什么是循环队列 由于队列会出队入队,因此我们需要利用好队列出队的空间,因此我们需要设置循环队列 2.循环队列的...

  • 数据结构与算法之队列(五)

    目录 队列简介队列的接口设计用栈实现队列双端队列实现循环队列实现循环双端队列 一 简介 队列是一种特殊的线性表,只...

  • 队列(链式队列和循环队列)

    队列FIFO,先进先出。 API 链式队列 循环队列

  • leetcode622.设计循环队列

    题目链接 题解: 在我的文章数据结构之——队列与循环队列 中,有关于循环队列的设计,包括本题没有考虑过的resiz...

  • 队列(循环队列)

    队列:只允许在一段进行插入,在另一端进行删除的线性表。 循环队列:具有队头指针和队尾指针,指示队列元素所在的位置,...

网友评论

      本文标题:队列与循环队列

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