队列实现系列(二)——队列的链表实现(Java版)

不多哔哔,直接上代码,多于的话请看

队列实现系列(一)——队列的数组实现(Java版) 

链表实现队列时,不需要考虑ElementOutOfBoundary问题,因此不需要做成循环队列。

Before:这里实现时,使用的链表不是Java自带的链表,是我自己写的链表,代码见:

链表实现系列(一)——简单链表Java实现

下面是链式队列实现代码(LinkedListQueue)

/**
 * Created by Hzc on 2019/1/28.
 * 队列的链表实现
 * 使用的链表是单向链表
 * 使用上一节中实现的代码
 */
public class LinkedListQueue<Type> {

    /**
     * queue:用作队列的链表
     */
    private SingleList<Type> queue;

    /**
     * 两种构造方法
     */
    public LinkedListQueue(){//空构造方法
        queue = new SingleList<>();
    }

    public LinkedListQueue(Type[] list){//根据给定数组构造队列
        for (int i = 0; i < list.length; i++) {
            queue.addNodeAfterTail(list[i]);
        }
    }

    /**
     * 数据入队
     * @param data:需要入队的数据
     */
    public void enQueue(Type data){
        queue.addNodeAfterTail(data);
    }

    /**
     * 数据出队
     * @return 队首数据
     */
    public Type deQueue(){
        Type data =(Type) queue.getHead().getData();//获得队首数据
        queue.removeNodeByData(data);//删除队首
        return data;//返回队首数据
    }

    /**
     * 获取队首数据
     * @return 队首数据
     */
    public Type getQueueHead(){
        return (Type) queue.getHead().getData();
    }

    /**
     * 获取队列长度
     * @return 队列长度
     */
    public int getLength(){
        return queue.getListLength();
    }

    /**
     * 清空队列
     */
    public void clear(){
        queue.clear();
    }

    /**
     * 判断队列是否为空
     * @return 队列是否为空
     */
    public boolean isEmpty(){
        return queue.isEmpty();
    }

    /**
     * 打印队列数据
     */
    public void display(){
        queue.display();
    }
}

下面是测试代码(LinkedListQueueTest)

public class LinkedListQueueTest {

    private static final int MULTI = 6;
    private static final int LENGTH = 20;
    private LinkedListQueue<Integer> queue;

    public static void main(String[] args) {
        LinkedListQueueTest a = new LinkedListQueueTest();
        a.run();
    }

    public void run(){
        queue = new LinkedListQueue();
        testEnQueue();//将队列填满
        testDeQueue();//让队首元素出队
        for (int i = 0; i < 3; i++) {//再添加几个数据
            queue.enQueue(i*7);
        }
        queue.display();
        testDeQueue();
        testDeQueue();//再出队两个元素
        testGetQueueHead();
        testGetLength();
        testClear();
    }

    public void testEnQueue(){
        System.out.println("----测试enQueue()----");
        for (int i = 0; i < LENGTH; i++) {
            queue.enQueue(i*MULTI);
        }
        queue.display();
    }

    public void testDeQueue(){
        System.out.println("----测试deQueue()----");
        System.out.println("出队:" + queue.deQueue());
        queue.display();
    }

    public void testGetQueueHead(){
        System.out.println("----测试getQueueHead()----");
        System.out.println("当前队首:" + queue.getQueueHead());
        queue.display();
    }

    public void testGetLength(){
        System.out.println("----测试getLength()----");
        System.out.println("当前队列长度:" + queue.getLength());
        queue.display();
    }

    public void testClear(){
        System.out.println("----测试clear()----");
        queue.clear();
        queue.display();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42034276/article/details/86707916