// Two constructors are provided: one that creates a queue of default // capacity & one that allows the main method to specify the capacity. public class ArrayBoundedQueue implements BoundedQueueInterface { protected final int DEFAULTCAP = 100; // default capacity protected Object[] queue; // array that holds queue elements protected int numElements = 0; // number of elements in the queue protected int front = 0; // index of front of queue protected int rear; // index of rear of queue public ArrayBoundedQueue() { queue = new Object[DEFAULTCAP]; rear = DEFAULTCAP - 1; } public ArrayBoundedQueue(int maxSize) { queue = new Object[maxSize]; rear = maxSize - 1; } @Override public void enqueue(Object element) { if (isFull()) System.out.println("Enqueue was attempted on a full queue!"); else { rear = (rear + 1) % queue.length; queue[rear] = element; numElements = numElements + 1; } } @Override public Object dequeue() { if (isEmpty()) { System.out.println("Dequeue attempted on an empty queue!"); return null; } else { Object itemToReturn = queue[front]; queue[front] = null; front = (front + 1) % queue.length; numElements = numElements - 1; return itemToReturn; } } @Override public boolean isEmpty() { return (numElements == 0); } @Override public boolean isFull() { return (numElements == queue.length); } }