Java队列实现(java注释@)
生活随笔
收集整理的這篇文章主要介紹了
Java队列实现(java注释@)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、隊列簡單介紹
隊列是一種常用的數據結構之一,與之前的棧類似,不過隊列是“先進先出”。隊列有隊頭(front)和隊尾(rear),數據從隊尾進入隊列,從隊頭出隊列,隊頭(front)指向隊列的第一個數據,隊尾(rear)指向隊列中的最后一個數據。
二、隊列實現
隊列有很多種,這里只是介紹最基本的實現,采用鏈式存儲,也就是鏈式隊列,與之前的鏈表存儲形式一樣,通過結點對象描述一個數據,結點對象包含具體數據和下一個結點的引用。
1、創建節點類
結點類就跟創建鏈表的結點類一樣。
public class Node<T> {
// 存儲的數據
private T data;
// 下一個節點的引用
private Node<T> next;
public Node(T data) {
this.data = data;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public Node<T> getNext() {
return next;
}
public void setNext(Node<T> next) {
this.next = next;
}
}
2、創建隊列類LinkQueue
在LinkQueue類中成員變量及方法如下:
成員變量:front、rear、size
對應的行為方法有:入隊、出隊、獲取隊列元素個數、判斷隊列是否為空。
public class LinkQueue<T> {
// 隊頭
private Node<T> front;
// 隊尾
private Node<T> rear;
// 元素個數
private int size;
/** * 創建隊列 */
public LinkQueue() {
rear = front = null;
}
/** * 入隊列 * * @param data */
public void enQueue(T data) {
Node<T> node = new Node<T>(data);
if (isEmputy()) {
front = rear = node;
} else {
rear.setNext(node);
rear = node;
}
size++;
}
/** * 出隊列 * * @return 返回數據 */
public T deQueue() {
if (isEmputy()) {
throw new RuntimeException("隊列為空");
}
Node<T> delete = front;
front = delete.getNext();
delete.setNext(null);; // help GC
size--;
if (size == 0) {
// 刪除掉最后一個元素時,front值已經為null,但rear還是指向該節點,需要將rear置為null
// 最后一個結點front和rear兩個引用都沒指向它,幫助GC處理該節點對象
rear = front;
}
return (T) delete.getData();
}
/** * 判斷隊列是否為空 * @return */
public boolean isEmputy() {
return (front == null && rear == null) ? true : false;
}
/** * 獲取隊列的元素個數 * @return */
public int size() {
return this.size;
}
}
當創建隊列時隊列中沒有數據,front和rear的值都為null。當插入第一個數據時,將front和rear都指向第一個結點對象
后續在插入數據時就利用rear進行數據的插入。
3、測試
測試代碼及結果如下:
public static void main(String[] args) {
LinkQueue<Integer> queue = new LinkQueue<Integer>();
queue.enQueue(1);
queue.enQueue(2);
queue.enQueue(3);
queue.enQueue(4);
System.out.println("size:" + queue.size());
System.out.println("出隊列:" + queue.deQueue());
System.out.println("出隊列:" + queue.deQueue());
System.out.println("出隊列:" + queue.deQueue());
System.out.println("出隊列:" + queue.deQueue());
System.out.println("刪完重新添加==============");
queue.enQueue(11);
queue.enQueue(22);
queue.enQueue(33);
queue.enQueue(44);
System.out.println("size:" + queue.size());
System.out.println("出隊列:" + queue.deQueue());
System.out.println("出隊列:" + queue.deQueue());
System.out.println("出隊列:" + queue.deQueue());
System.out.println("出隊列:" + queue.deQueue());
}
size:4
出隊列:1
出隊列:2
出隊列:3
出隊列:4
刪完重新添加==============
size:4
出隊列:11
出隊列:22
出隊列:33
出隊列:44
好了,java隊列的簡單實現就介紹到這里。
生活不只是敲代碼,如果你或你身邊的人喜歡攝影或者生活的點點滴滴,可以關注下面的公眾號~
總結
以上是生活随笔為你收集整理的Java队列实现(java注释@)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: onResume的作用
- 下一篇: 启用shift后门的方法_shift按五