[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/primary-code-test/Java/dev/DataStructures/Queues/LinkedQueue.java [Back]  [Original]

package DataStructures.Queues;

import java.util.NoSuchElementException;

public class LinkedQueue {
  class Node {
    int data;
    Node next;

    public Node() {
      this(0);
    }

    public Node(int data) {
      this(data, null);
    }

    public Node(int data, Node next) {
      this.data = data;
      this.next = next;
    }
  }

  /** Front of Queue */
  private Node front;

  /** Rear of Queue */
  private Node rear;

  /** Size of Queue */
  private int size;

  /** Init LinkedQueue */
  public LinkedQueue() {
    front = rear = new Node();
  }

  /**
   * Check if queue is empty
   *
   * @return true if queue is empty, otherwise false
   */
  public boolean isEmpty() {
    return size == 0;
  }

  /**
   * Add element to rear of queue
   *
   * @param data insert value
   * @return true if add successfully
   */
  public boolean enqueue(int data) {
    Node newNode = new Node(data);
    rear.next = newNode;
    rear = newNode; /* make rear point at last node */
    size++;
    return true;
  }

  /**
   * Remove element at the front of queue
   *
   * @return element at the front of queue
   */
  public int dequeue() {
    if (isEmpty()) {
      throw new NoSuchElementException("queue is empty");
    }
    Node destroy = front.next;
    int retValue = destroy.data;
    front.next = front.next.next;
    destroy = null; /* clear let GC do it's work */
    size--;

    if (isEmpty()) {
      front = rear;
    }

    return retValue;
  }

  /**
   * Peek element at the front of queue without removing
   *
   * @return element at the front
   */
  public int peekFront() {
    if (isEmpty()) {
      throw new NoSuchElementException("queue is empty");
    }
    return front.next.data;
  }

  /**
   * Peek element at the rear of queue without removing
   *
   * @return element at the front
   */
  public int peekRear() {
    if (isEmpty()) {
      throw new NoSuchElementException("queue is empty");
    }
    return rear.data;
  }

  /**
   * Return size of queue
   *
   * @return size of queue
   */
  public int size() {
    return size;
  }

  /** Clear all nodes in queue */
  public void clear() {
    while (!isEmpty()) {
      dequeue();
    }
  }

  @Override
  public String toString() {
    if (isEmpty()) {
      return "[]";
    }
    StringBuilder builder = new StringBuilder();
    Node cur = front.next;
    builder.append("[");
    while (cur != null) {
      builder.append(cur.data).append(", ");
      cur = cur.next;
    }
    builder.replace(builder.length() - 2, builder.length(), "]");
    return builder.toString();
  }

  /* Driver Code */
  public static void main(String[] args) {
    LinkedQueue queue = new LinkedQueue();
    assert queue.isEmpty();

    queue.enqueue(1); /* 1 */
    queue.enqueue(2); /* 1 2 */
    queue.enqueue(3); /* 1 2 3 */
    System.out.println(queue); /* [1, 2, 3] */

    assert queue.size() == 3;
    assert queue.dequeue() == 1;
    assert queue.peekFront() == 2;
    assert queue.peekRear() == 3;

    queue.clear();
    assert queue.isEmpty();

    System.out.println(queue); /* [] */
  }
}

Web Proxy Viewer  |  New URL  |  Original Page