Java佇列實現
阿新 • • 發佈:2019-01-06
一、佇列簡單介紹
佇列是一種常用的資料結構之一,與之前的棧類似,不過佇列是“先進先出”。佇列有隊頭(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佇列的簡單實現就介紹到這裡。
生活不只是敲程式碼,如果你或你身邊的人喜歡攝影或者生活的點點滴滴,可以關注下面的公眾號~