Java Queue based on double-stranded tables
In addition to a one-dimensional array, a single-chain table can be used to implement a queue, and a dual-chain table can also be used to implement a queue.
When implementing a two-way linked list based on the NLNode class, in order to make programming more concise, we usually need to set a Dummy node at the front and end ). These two nodes are called Header nodes and Trailer node (I), which act as Sentinel. That is to say, they do not store any substantive data objects. The next (prev) reference of the header (tail) node points to the first (last) node, and the prev (next) reference is empty. The following code shows the structure of a two-way linked list:
Java code:
DoubleNode class:
package com.doub.list;/** * * @author gannyee * */public class DoubleNode { //Declared element private Object element; //Declared prior private DoubleNode prior; //Declared next private DoubleNode next; //Constructor public DoubleNode(){ this(null,null,null); } public DoubleNode(DoubleNode prior,Object element, DoubleNode next){ this.prior = prior; this.element = element; this.next = next; } //Get element public Object getElement() { return element; } //Set element public void setElement(Object element) { this.element = element; } //Get prior public DoubleNode getPrior() { return prior; } //Set prior public void setPrior(DoubleNode prior) { this.prior = prior; } //Get next public DoubleNode getNext() { return next; } //Set next public void setNext(DoubleNode next) { this.next = next; }}
DoubleListQueue class:
package com.doub.list;import java.util.Arrays;import com.queue.ExceptionQueueEmpty;public class DoubleListQueue { // Declared head private static DoubleNode head; // Declared rear private static DoubleNode rear; // Declared size; private static int size; //Declared length private static int length; // Constructor public DoubleListQueue() { //initialize head = new DoubleNode(); rear = new DoubleNode(); head.setNext(rear); head.setPrior(null); rear.setNext(null); rear.setPrior(head); this.size = this.length = 0; } // Get size public int getSize() { return size; } //Get length public int length(){ return length; } // Is empty public boolean isEmpty() { return size == 0; } // Insert element in first position public void insertFirst(Object element) { DoubleNode newNode = new DoubleNode(head,element,head.getNext()); head.getNext().setPrior(newNode); head.setNext(newNode); size ++; length = size; } // Insert element in last position public void insertLast(Object element) { DoubleNode newNode = new DoubleNode(rear.getPrior(),element,rear); rear.getPrior().setNext(newNode); rear.setPrior(newNode); size ++; length = size; } // Remove element from first position public void removeFirst() throws ExceptionQueueEmpty{ if(isEmpty()) throw new ExceptionQueueEmpty(Queue is empty); head.getNext().getNext().setPrior(head); head.setNext(head.getNext().getNext()); size --; } // Remove element from last position public void removeLast() throws ExceptionQueueEmpty{ if(isEmpty()) throw new ExceptionQueueEmpty(Queue is empty); rear.getPrior().getPrior().setNext(rear); rear.setPrior(rear.getPrior().getPrior()); size --; } // Get first node but not isn't deletion public Object getFirst() throws ExceptionQueueEmpty{ if(isEmpty()) throw new ExceptionQueueEmpty(Queue is empty); return head.getNext().getElement(); } // Get last node but not isn't deletion public Object getLast() throws ExceptionQueueEmpty{ if(isEmpty()) throw new ExceptionQueueEmpty(Queue is empty); return rear.getPrior().getElement(); } //Get all element public void getAllElements(){ Object[] array = new Object[getSize()]; DoubleNode travelNode = new DoubleNode(); travelNode = head.getNext(); for(int i = 0; travelNode != rear;i ++){ array[i] = travelNode.getElement(); travelNode = travelNode.getNext(); } System.out.println(All elements are: + Arrays.toString(array)); }}
DoubleListQueueTest class:
package com.doub.list;import com.queue.ExceptionQueueEmpty;/** * * @author gannyee * */public class DoubleListQueueTest { public static void main(String[] args) throws ExceptionQueueEmpty { DoubleListQueue dlq = new DoubleListQueue(); System.out.println(Size: + dlq.getSize()); System.out.println(Is empty? + dlq.isEmpty()); for(int i = 0;i < 6;i ++){ dlq.insertFirst(i); } System.out.println(Size: + dlq.getSize()); System.out.println(Is empty? + dlq.isEmpty()); dlq.getAllElements(); System.out.println(dlq.getFirst()); System.out.println(dlq.getLast()); for(int i = 0;i < 6;i ++){ dlq.insertLast(i + 1); } System.out.println(Size: + dlq.getSize()); System.out.println(Is empty? + dlq.isEmpty()); dlq.getAllElements(); System.out.println(dlq.getFirst()); System.out.println(dlq.getLast()); for(int i = 0;i < 6;i ++){ dlq.removeFirst(); } System.out.println(Size: + dlq.getSize()); System.out.println(Is empty? + dlq.isEmpty()); dlq.getAllElements(); System.out.println(dlq.getFirst()); System.out.println(dlq.getLast()); for(int i = 0;i < 6;i ++){ dlq.removeLast(); } System.out.println(Size: + dlq.getSize()); System.out.println(Is empty? + dlq.isEmpty()); dlq.getAllElements(); }}
Test results:
Size: 0Is empty? trueSize: 6Is empty? falseAll elements are: [5, 4, 3, 2, 1, 0]50Size: 12Is empty? falseAll elements are: [5, 4, 3, 2, 1, 0, 1, 2, 3, 4, 5, 6]56Size: 6Is empty? falseAll elements are: [1, 2, 3, 4, 5, 6]16Size: 0Is empty? trueAll elements are: []