數據結構之基本數據結構---隊列:先入先出
百度百科:
隊列是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的后端(rear)進行插入操作,和棧一樣,
隊列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。
1.自定義隊列實現:
代碼展示:

package queue; import java.lang.reflect.Array; /** * @Author YangHe * @Date 2020/4/14 16:45 * 手動實現:對列的基本操作 * 先進先出:FIFO */ public class QueueTest<T> { private int queueSize; //隊列大小 private int base; //基地址 private int front; //隊列頭 private int rear; //隊列尾 private T[] array; //存儲使用數組來實現 /** * 初始化隊列 * @param type 數組類型 * @param queueSize 數組大小 */ public QueueTest(Class<T> type,int queueSize){ this.queueSize=queueSize; this.front=this.rear=0; this.base=0; array= (T[])Array.newInstance(type,queueSize); } //隊列是否為空 public boolean isEmpty(){ return front==rear; } //隊列是否已滿 public boolean isFull(){ return (rear+2)%queueSize==front; //為區分為空或者滿 設置容量-1 為滿 } //入隊列 public void offer(T n){ if(!isFull()){ if(rear==(queueSize-1)){ array[rear]=n; rear=base; //重新指向底部 }else{ array[rear++]=n; } }else{ System.out.println("隊列已滿!"); } } //出隊列不刪除 public T peek(){ if(!isEmpty()){ return array[front]; }else{ return null; } } //出隊列刪除元素 public T poll(){ if(!isEmpty()){ if(front==(queueSize-1)){ T t= array[front]; front=base; return t; }else{ return array[front++]; } }else{ return null; } } //獲取隊列長度 public int getQueueLength(){ return Math.abs(rear-front); } public static void main(String[] args) { QueueTest<Integer> queueTest=new QueueTest<>(Integer.class,5); for(int i=0;i<10;i++){ System.out.println(i+"+++++"); queueTest.offer(i); System.out.println("隊列尾:"+queueTest.rear); System.out.println("隊列頭:"+queueTest.front); System.out.println("隊列長度:"+queueTest.getQueueLength()); queueTest.poll(); System.out.println("隊列尾:"+queueTest.rear); System.out.println("隊列頭:"+queueTest.front); System.out.println("隊列長度:"+queueTest.getQueueLength()); } } }
結果輸出:
2.通過collection接口下的Queue實現單端隊列 該示例代碼只是展示部分功能,其他功能自行探索:
示例代碼:

package queue; import java.util.PriorityQueue; /** * @Author YangHe * @Date 2020/4/17 0:05 * 通過collection接口下的Queue實現單端隊列 * 該示例代碼只是展示部分功能,其他功能自行探索 */ public class PriorityQueueTest { public static void main(String[] args) { PriorityQueue pq=new PriorityQueue(); pq.add("Java基礎"); //添加隊列元素 pq.add("python基礎"); pq.add("MySQL基礎"); pq.add("Linux基礎"); System.out.println("輸出隊列長度:"+pq.size()); System.out.println("輸出隊列"+pq); System.out.println("取出不刪除隊列元素:"+pq.peek()+" 輸出隊列長度:"+pq.size()); System.out.println("取出不刪除隊列元素:"+pq.peek()+" 輸出隊列長度:"+pq.size()); System.out.println("取出不刪除隊列元素:"+pq.peek()+" 輸出隊列長度:"+pq.size()); System.out.println("輸出隊列"+pq); System.out.println("取出並且刪除隊列元素:"+pq.poll()+" 輸出隊列長度:"+pq.size()); System.out.println("取出並且刪除隊列元素:"+pq.poll()+" 輸出隊列長度:"+pq.size()); System.out.println("取出並且刪除隊列元素:"+pq.poll()+" 輸出隊列長度:"+pq.size()); System.out.println("輸出隊列"+pq); } }
示例結果:
3.實際運用實例: