设计 [循环队列] 以及 [循环双端队列] 代码

    科技2022-08-10  99

    循环队列

    class MyCircularQueue { int[] queue; int front; int rear; int capacity; /** Initialize your data structure here. Set the size of the queue to be k. */ public MyCircularQueue(int k) { capacity = k + 1; queue = new int[capacity]; // 队头指针指向第一个保存的元素位置 // 删除时,+1 (取模) front = 0; // 队尾指针指向下一个保存元素的位置 // 添加时,先赋值,再加 (取模) rear = 0; } /** Insert an element into the circular queue. Return true if the operation is successful. */ public boolean enQueue(int value) { if (isFull()) return false; queue[rear] = value; rear = (rear + 1 ) % capacity; return true; } /** Delete an element from the circular queue. Return true if the operation is successful. */ public boolean deQueue() { if (isEmpty()) return false; front = (front + 1) % capacity; return true; } /** Get the front item from the queue. */ public int Front() { if (isEmpty()) return -1; return queue[front]; } /** Get the last item from the queue. */ public int Rear() { if(isEmpty()) return -1; return queue[(rear + capacity - 1) % capacity]; } /** Checks whether the circular queue is empty or not. */ public boolean isEmpty() { return front == rear; } /** Checks whether the circular queue is full or not. */ public boolean isFull() { return (rear + 1) % capacity == front; } }

    循环双端队列

    class MyCircularDeque { int[] queue; int front; int rear; int capacity; /** Initialize your data structure here. Set the size of the deque to be k. */ public MyCircularDeque(int k) { capacity = k + 1; queue = new int[capacity]; // 头部指向第 1 个存放元素的位置 // 插入时,先减,再赋值 // 删除时,索引 +1(注意取模) front = 0; // 尾部指向第一个尾插的后一个位置(空位置) // 插入时,先赋值,再加 // 删除时,索引 -1(注意取模) rear = 0; } /** Adds an item at the front of Deque. Return true if the operation is successful. */ public boolean insertFront(int value) { if (!isFull()){ front = (front + capacity- 1) % capacity; queue[front] = value; return true; }else{ return false; } } /** Adds an item at the rear of Deque. Return true if the operation is successful. */ public boolean insertLast(int value) { if (!isFull()){ queue[rear] = value; rear = (rear + 1) % capacity; return true; }else{ return false; } } /** Deletes an item from the front of Deque. Return true if the operation is successful. */ public boolean deleteFront() { if (!isEmpty()){ front = (front + 1) % capacity; return true; }else{ return false; } } /** Deletes an item from the rear of Deque. Return true if the operation is successful. */ public boolean deleteLast() { if (!isEmpty()){ rear = (rear + capacity-1) % capacity; return true; }else{ return false; } } /** Get the front item from the deque. */ public int getFront() { if(!isEmpty()){ return queue[front]; }else{ return -1; } } /** Get the last item from the deque. */ public int getRear() { if(!isEmpty()){ return queue[(rear + capacity -1) % capacity]; }else{ return -1; } } /** Checks whether the circular deque is empty or not. */ public boolean isEmpty() { return front == rear; } /** Checks whether the circular deque is full or not. */ public boolean isFull() { return (rear + 1) % capacity == front; } }
    Processed: 0.011, SQL: 8