队列链式存储 - Java实现

队列链式存储结构实现

package com.kiger.Link;

/**
 * @ClassName LinkQueue
 * @Description 链式队列实现
 * @Author zk_kiger
 * @Date 2019/6/21 22:13
 * @Version 1.0
 */

public class LinkQueue<T> {
    private class Node {
        private T data;
        private Node next;

        public Node() {}

        public Node(T data, Node next) {
            this.data = data;
            this.next = next;
        }
    }

    private Node front;
    private Node rear;
    private int size = 0;

    public LinkQueue() {
        front = null;
        rear = null;
    }

    public LinkQueue(T element) {
        front = new Node(element, null);
        rear = front;
        size++;
    }

    // 获取元素个数
    public int length() {
        return size;
    }

    // 入队
    public void put(T element) {
        Node newNode = new Node(element, null);
        if(size == 0) {
            front = newNode;
            rear = front;
        } else {
            rear.next = newNode;
            rear = newNode;
        }
        size++;
    }

    // 出队
    public T remove() {
        Node delNode = null;
        if(size == 0) {
            throw new RuntimeException("队列为空");
        } else {
            delNode = front;
            front = delNode.next;
            delNode.next = null;
        }

        return delNode.data;
    }

    // 返回队首元素
    public T getFrontElemennt() {
        return front.data;
    }

    // 判断队列是否为空
    public boolean isEmpty() {
        return size == 0;
    }

    // 清空队列
    public void clear() {
        front = rear = null;
        size = 0;
    }

    @Override
    public String toString() {
        if (isEmpty()) {
            return "[]";
        } else {
            StringBuilder sb = new StringBuilder("[");
            for (Node current = front; current != null; current = current.next) {
                sb.append(current.data.toString() + ", ");
            }

            int len = sb.length();

            return sb.delete(len - 2, len).append("]").toString();
        }
    }
}

测试代码

package com.kiger.Link;

import org.junit.Test;

/**
 * @ClassName LinkQueueTest
 * @Description TODO
 * @Author zk_kiger
 * @Date 2019/6/22 13:40
 * @Version 1.0
 */

public class LinkQueueTest {
    @Test
    public void test() {
        LinkQueue<String> queue = new LinkQueue<>();
        System.out.println("队列是否为空:"  + queue.isEmpty());
        queue.put("A");
        queue.put("B");
        queue.put("C");
        queue.put("D");
        System.out.println(queue);
        System.out.println("队首元素:" + queue.getFrontElemennt());
        System.out.println("队列长度:" + queue.length());
        System.out.println("移除队首:" + queue.remove());
        System.out.println(queue);
        System.out.println("清空队列");
        queue.clear();
        System.out.println(queue);
        System.out.println("队列是否为空:"  + queue.isEmpty());
    }
}

发布了120 篇原创文章 · 获赞 16 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43327091/article/details/93321645