用链表实现无界队列

用链表实现无界队列


 1/**
 2 * 使用链表实现一个无界队列
 3 *
 4 * @author wangy
 5 * @version 1.0
 6 * @date 2021/6/28 / 15:09
 7 */
 8public class ListQueue {
 9    // index
10    private Node head;
11
12    private Node tail;
13
14    private int size;
15
16    public ListQueue() {
17    }
18
19    int size() {
20        return size;
21    }
22
23    int enQueue(int e) {
24        Node node = new Node(e);
25        // empty
26        if (size == 0) {
27            head = tail = node;
28        } else {
29            tail.next = node;
30            tail = node;
31        }
32        ++size;
33        return e;
34    }
35
36    int deQueue() {
37        if (size == 0) throw new RuntimeException("xx为空");
38        int e = head.n_data;
39        head = head.next;
40        // head = null, 链表元素全部弹出
41        if (head == null) tail = null;
42        --size;
43        return e;
44    }
45
46    // O(n)
47    void printAll() {
48        // 打印链表
49        System.out.print("[");
50        Node pos = head;
51        for (int i = 0; i < size; i++) {
52            if (i == size - 1) {
53                System.out.print(pos.n_data);
54            } else {
55                System.out.print(pos.n_data + ", ");
56            }
57            pos = pos.next;
58        }
59        System.out.println("]");
60    }
61
62    public static void main(String[] args) {
63        ListQueue lq = new ListQueue();
64        lq.enQueue(1);
65        lq.enQueue(2);
66//        lq.enQueue(3);
67        lq.enQueue(4);
68
69        lq.deQueue();
70        lq.deQueue();
71        lq.printAll();
72
73    }
74
75    /************************* 单链表 ************************/
76
77    private class Node {
78        private int n_data;
79        private Node next;
80
81        public Node(int n_data) {
82            this.n_data = n_data;
83            this.next = null;
84        }
85    }
86}