数据结构学习(四):用链表实现队列

版权声明:文章为作者原创,若要转载请获得作者同意。尊重版权,从你我做起! https://blog.csdn.net/qq_37768971/article/details/88214734

一、任务目标

用链表实现队列的基本功能:
1.getSize;

2.getFront;

3.isEmpty;

4.enqueue;

5.dequeue;

二、实现代码:

1.接口部分:

package IMUHERO;

public interface Queue<E> {
     E getFront();
     boolean isEmpty();
     void enqueue(E e);
     E dequeue();
     int getSize();

}

2.LinkedListQueue部分:

package IMUHERO;

/*
* @作者:IMUHERO
* @时间:2019/3/6
* @功能:用链表实现队列
* */

public class LinkedListQueue<E>implements Queue<E> {

    private class Node{
        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;
    private Node tail;
    private int size ;
    public LinkedListQueue(){
        head=null;
        tail=null;
        size=0;
    }

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

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

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

    @Override
    public void enqueue(E e) {
        if (tail==null){
            tail= new Node(e);//表示Node(e,null),新建一个节点,节点内元素为e,先把这个节点的next指向null,再把这个节点赋值给tail;
            head=tail;
        }
        else {
            tail.next=new Node(e);
            tail=tail.next;
        }
        size++;
    }

    @Override
    public E dequeue() {
        if (isEmpty())throw new IllegalArgumentException("The queue is empty,can not dequeue any element!");
        Node retNode=head;
        head =retNode.next;
        retNode.next=null;
        if (head==null)tail=null;
        size--;
        return  retNode.e;
    }

    @Override
    public String toString() {
        StringBuilder stringBuilder=new StringBuilder();
        stringBuilder.append("queue|front[");
        for(Node cur=head;cur!=null;cur=cur.next)
            stringBuilder.append(cur+"->");
        stringBuilder.append("null]tail");
        return stringBuilder.toString();
    }
}

3.测试部分:

package IMUHERO;

public class Main {

    public static void main(String[] args) {
	// write your code here
        LinkedListQueue queue=new LinkedListQueue();
        System.out.println(queue);
        for (int i=0;i<5;i++){
            queue.enqueue(i);
            System.out.println(queue);
        }

        for (int i=0;i<3;i++){
            queue.dequeue();
            System.out.println(queue);
        }

        System.out.println("队列的大小为:"+queue.getSize());
        System.out.println("队首第一个元素为:"+queue.getFront());

    }
}

三、最终结果:

queue|front[null]tail
queue|front[0->null]tail
queue|front[0->1->null]tail
queue|front[0->1->2->null]tail
queue|front[0->1->2->3->null]tail
queue|front[0->1->2->3->4->null]tail
queue|front[1->2->3->4->null]tail
queue|front[2->3->4->null]tail
queue|front[3->4->null]tail
队列的大小为:2
队首第一个元素为:3

符合链表实现队列的要求和功能!

猜你喜欢

转载自blog.csdn.net/qq_37768971/article/details/88214734