package com.javainuse; import java.util.Arrays; public class CircularQueueImplementation { public static void main(String[] args) { CircularQueue<Integer> circularQueue = new CircularQueue(8); circularQueue.enqueue(15); circularQueue.enqueue(16); circularQueue.enqueue(17); circularQueue.enqueue(18); circularQueue.enqueue(19); circularQueue.enqueue(20); circularQueue.enqueue(21); circularQueue.enqueue(22); System.out.println("Full Circular Queue" + circularQueue); System.out.print("Dequeued following element from circular Queue "); System.out.println(circularQueue.dequeue() + " "); circularQueue.enqueue(23); System.out.println("After enqueueing circular queue with element having value 23"); System.out.println(circularQueue); } } //implementation of Circular Queue using Generics class CircularQueue<E> { private int currentSize; //Current Circular Queue Size private E[] circularQueueElements; private int maxSize; //Circular Queue maximum size private int rear;//rear position of Circular queue(new element enqueued at rear). private int front; //front position of Circular queue(element will be dequeued from front). public CircularQueue(int maxSize) { this.maxSize = maxSize; circularQueueElements = (E[]) new Object[this.maxSize]; currentSize = 0; front = 0; rear = 0; } /** * Enqueue elements to rear. */ public void enqueue(E item) throws QueueFullException { if (isFull()) { throw new QueueFullException("Circular Queue is full. Element cannot be added"); } else { circularQueueElements[rear] = item; rear = (rear + 1) % circularQueueElements.length; currentSize++; } } /** * Dequeue element from Front. */ public E dequeue() throws QueueEmptyException { E deQueuedElement; if (isEmpty()) { throw new QueueEmptyException("Circular Queue is empty. Element cannot be retrieved"); } else { deQueuedElement = circularQueueElements[front]; circularQueueElements[front] = null; front = (front + 1) % circularQueueElements.length; currentSize--; } return deQueuedElement; }