基于链表实现队列

链表实现队列的底层实现

image.png

接口定义

public interface Queue <E> {
    void enQueue(E e);
    E deQueue();
    int getSize();
    E getFront();
    boolean isEmpty();
}
public class LinkedListQueue<E> implements Queue<E> {

    private class Node<E>{
        E e;
        Node next;
        public Node (E e, Node next){
            this.e=e;
            this.next=next;
        }
        public Node(E e){
            this(e,null);
        }
        public Node(){
            this(null,null);
        }

        @Override
        public String toString() {
            return e.toString();
        }
    }
    private Node head,tail;
    private int size;

    public LinkedListQueue(){
        this.head=null;
        this.tail=null;
        size=0;
    }
    @Override
    public int getSize() {
        return size;
    }

    @Override
    public boolean isEmpty() {
        return size==0;
    }
    @Override
    public void enQueue(E e) {
        if(tail==null) {
            tail = new Node(e);
            head=tail;
        }
        else{
            tail.next=new Node(e);
            tail=tail.next;
        }
        size++;
    }

    @Override
    public E deQueue() {
        if(isEmpty()){
            throw new IllegalArgumentException("DeQueue fail, Queue is Empty!");
        }
        Node retNode=head;
        head=head.next;
        retNode.next=null;
        if(head.next==null){
            tail=null;
        }
        size--;
        return (E) retNode.e;
    }


    @Override
    public E getFront() {
        if(isEmpty())
            throw new IllegalArgumentException("*Queue is empty.");
        return (E) head.e;
    }

    @Override
    public String toString() {
        StringBuilder res=new StringBuilder();
        res.append("Queue front ");
        Node cur=head;
        while (cur!= null) {
            res.append(cur+"->");
            cur=cur.next;
        }
        res. append ( "NULL tail' ");
        return res. toString ();
    }
    public static void main(String[] args){
        LinkedListQueue<Integer> queue=new LinkedListQueue<>();
        System.out.println(queue.isEmpty());
        queue.enQueue(1);
        queue.enQueue(2);
        queue.enQueue(3);
        queue.enQueue(4);
        queue.enQueue(5);
        System.out.println(queue);
        queue.deQueue();
        queue.deQueue();
        System.out.println(queue);
        System.out.println(queue.getSize());

    }
}

实验结果
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容