Jump to content

Circular buffer / queue visualization


Recommended Posts

Posted (edited)

Cookie pls doge.png

 

168ab2ab8a9b66755aa657a154a9ba8f.gif

package org.bjornkrols.botre.datastructures.queue;

import java.util.Iterator;
import java.util.NoSuchElementException;

/**
 * Created by Bjorn on 25/05/2015.
 * Last edit: 25/05/2015.
 */
public class CircularArrayQueue<T> implements Queue<T>, Iterable<T> {

    private T[] queue;

    private int front, insert, size;

    public CircularArrayQueue(int capacity){
        queue = (T[]) new Object[capacity];
    }

    /**
     * Inserts the element at the rear of the queue.
     * If the queue is full, the oldest value will be removed and the the second oldest element will become the front element.
     */
    @Override
    public void enqueue(T element) {
        queue[insert] = element;
        insert = (insert + 1) % queue.length;
        if (isFull()) {
            front = (front + 1) % queue.length;
        } else {
            size++;
        }
    }

    @Override
    public T dequeue() {
        if (size == 0) {
            throw new NoSuchElementException("Queue is empty.");
        }
        T element = queue[front];
        queue[front] = null;
        front = (front + 1) % queue.length;
        size--;
        return element;
    }

    @Override
    public boolean isEmpty() {
        return size == 0;
    }

    public boolean isFull() {
        return size == queue.length;
    }

    @Override
    public int size() {
        return size;
    }

    @Override
    public Iterator<T> iterator() {
        return new QueueIterator();
    }

    public class QueueIterator implements Iterator<T> {

        private int current = front;
        private int i;

        @Override
        public boolean hasNext() {
            return i < queue.length;
        }

        @Override
        public T next() {
            T value = queue[current];
            current = (current + 1) % queue.length;
            i++;
            return value;
        }

    }

}
Edited by Botre

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...