java数据结构之队列的链式实现

     数据结构中的队列(queue),是一种先进先出的线性表,在java锁,并发处理上有着极其重要的作用,让我们来探究一下队列的实现原理。

     queue中有着头结点和尾节点,当新增put队列值的时候需要尾节点指针加一,头结点不变,当从队列中取值的时候,头结点出队

并移动头结点的指针。

/**
 * Created on 2018/8/9.
 */
public class FIFOQueue {

    // 初始化队列
    public static void initQueue(LinkQueue queue) {
        // 初始化头结点和尾节点
        queue.front = queue.rear = new Node();
        // 将他们的下一个指针置为空
        queue.front.next = null;
    }
    // 入队(name可以是任意一个对象,只要是想入队的都可以。)
    public static void put(LinkQueue queue, String name) {
        // 新建一个节点来存储需要入队的信息
        Node p = new Node();
        // 将节点信息赋值
        p.name = name;
        // 将新加节点的下一个节点置为空
        p.next = null;
        // 将新建的节点加入的队列的尾部
        queue.rear.next = p;
        // 修改尾节点的指针
        queue.rear = p;
    }
    // 队列出队(头结点出队列)
    public static String get(LinkQueue queue) {
        // 判断是否为空队列,如果为空队列,返回error
        if (queue.front == queue.rear) {
            return "error";
        }
        Node p = new Node();
        // 获取头结点的指针
        p = queue.front.next;
        // 获取到将要出队列的值
        String e = p.name;
        // 修改头指针,节点出队完成
        queue.front.next = p.next;
        if (queue.rear == p) {
            queue.rear = queue.front;
        }
        return e;
    }
    public static void main(String[] args) {
        LinkQueue queue = new LinkQueue();
        initQueue(queue);
        for (int i = 0; i < 10; i++) {
            put(queue,"节点" + i);
        }
        // 入队10次,出队11次,会有一次报错
        for (int i = 0; i < 11; i++)
        System.out.println(get(queue));
    }
}

class Node {
    // 任意一个object
    String name;
    // 节点下一个指针
    Node next;
}

class LinkQueue {
    // 头结点
    Node front;
    // 尾节点
    Node rear;
}

java数据结构之队列的链式实现