• 0622. Design Circular Queue (M)


    Design Circular Queue (M)

    题目

    Design your implementation of the circular queue. The circular queue is a linear data structure in which the operations are performed based on FIFO (First In First Out) principle and the last position is connected back to the first position to make a circle. It is also called "Ring Buffer".

    One of the benefits of the circular queue is that we can make use of the spaces in front of the queue. In a normal queue, once the queue becomes full, we cannot insert the next element even if there is a space in front of the queue. But using the circular queue, we can use the space to store new values.

    Implementation the MyCircularQueue class:

    • MyCircularQueue(k) Initializes the object with the size of the queue to be k.
    • int Front() Gets the front item from the queue. If the queue is empty, return -1.
    • int Rear() Gets the last item from the queue. If the queue is empty, return -1.
    • boolean enQueue(int value) Inserts an element into the circular queue. Return true if the operation is successful.
    • boolean deQueue() Deletes an element from the circular queue. Return true if the operation is successful.
    • boolean isEmpty() Checks whether the circular queue is empty or not.
    • boolean isFull() Checks whether the circular queue is full or not.

    Example 1:

    Input
    ["MyCircularQueue", "enQueue", "enQueue", "enQueue", "enQueue", "Rear", "isFull", "deQueue", "enQueue", "Rear"]
    [[3], [1], [2], [3], [4], [], [], [], [4], []]
    Output
    [null, true, true, true, false, 3, true, true, true, 4]
    
    Explanation
    MyCircularQueue myCircularQueue = new MyCircularQueue(3);
    myCircularQueue.enQueue(1); // return True
    myCircularQueue.enQueue(2); // return True
    myCircularQueue.enQueue(3); // return True
    myCircularQueue.enQueue(4); // return False
    myCircularQueue.Rear();     // return 3
    myCircularQueue.isFull();   // return True
    myCircularQueue.deQueue();  // return True
    myCircularQueue.enQueue(4); // return True
    myCircularQueue.Rear();     // return 4
    

    Constraints:

    • 1 <= k <= 1000
    • 0 <= value <= 1000
    • At most 3000 calls will be made to enQueue, deQueue, Front, Rear, isEmpty, and isFull.

    Follow up: Could you solve the problem without using the built-in queue?


    题意

    实现一个循环队列。

    思路

    用数组很容易实现。


    代码实现

    Java

    class MyCircularQueue {
        private int size;
        private int head, tail;
        private int[] q;
    
        public MyCircularQueue(int k) {
            size = 0;
            head = tail = 0;
            q = new int[k];
        }
    
        public boolean enQueue(int value) {
            if (isFull()) return false;
    
            q[tail++] = value;
            if (tail == q.length) tail = 0;
            size++;
            return true;
        }
    
        public boolean deQueue() {
            if (isEmpty()) return false;
    
            head++;
            if (head == q.length) head = 0;
            size--;
            return true;
        }
    
        public int Front() {
            if (isEmpty()) return -1;
            return q[head];
        }
    
        public int Rear() {
            if (isEmpty()) return -1;
            int index = tail - 1 == -1 ? q.length - 1 : tail - 1;
            return q[index];
        }
    
        public boolean isEmpty() {
            return size == 0;
        }
    
        public boolean isFull() {
            return size == q.length;
        }
    }
    
  • 相关阅读:
    http和https
    openstack
    openstack安全问题
    openstack优势
    java多线程实现方式
    python多进程实现的几种方式
    Java 在提取url 生成图片以及正则表达式
    idea 生成 可执行文件
    dw cs6 支持高分辨率
    svchost.exe 大量占用的问题
  • 原文地址:https://www.cnblogs.com/mapoos/p/14616391.html
Copyright © 2020-2023  润新知