Java Queue based on double-stranded tables

Source: Internet
Author: User

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: []

 

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.