2.1資料結構學習筆記--佇列
3 佇列
概念:一個有序列表,可以使用陣列或連結串列實現
特點:先進先出
3.1使用陣列模擬佇列:
圖中的Queue代表佇列,MaxSize代表佇列最大容量,rear代表尾部、front代表頭部。入隊時rear數值(由-1變大)變化,出隊時front數值(由-1變大)變化
3.1.1思路分析:
- 當front == rear [空佇列],將尾指標往後移:rear+1,資料存入rear所指元素
- 當rea r== maxsize-1【佇列滿】,佇列無法儲存資料
3.1.2佇列實現程式碼:
public class ArrayQueue {
private int maxSize; //佇列容量
private int front; //佇列頭部
private int rear;//佇列尾部
private int[] arr;//佇列陣列
//建立佇列構造器
public ArrayQueue(int max){
maxSize=max;//指定佇列的容量大小
arr=new int[maxSize];
front=-1;//初始狀態,頭部指向佇列(從零開始) 的外面
rear=-1;//初始狀態,尾部也指向佇列(從零開始) 的外面
}
//判斷佇列是否以滿
public boolean isFull(){
return rear == maxSize-1;
}
//判斷佇列為空
public boolean isEmpty(){
return front==rear;
}
//顯示佇列的頭資料
public int headQueue(){
if (isEmpty()){
throw new RuntimeException("佇列是空的");
}
return arr[front+1];
//front初始在佇列外面,當front加一時,指向了第一個資料 注意:此時front的值是不變的,
}
//入隊
public void addQueue(int n){
if (isFull()){
System.out.println("佇列滿了");
return;
}
rear++; //rear初始在佇列外面,當rear加一時,指向了陣列的第一個空間
arr[rear]=n;
}
//出隊
public int getQueue(){
if (isEmpty()){
throw new RuntimeException("佇列是空的");
}
front++;
return arr[front];
}
//顯示佇列的所有資料
public void showQueue(){
if (isEmpty()){
System.out.println("佇列是空的");
return;
}
for (int i=0;i<arr.length;i++){
System.out.println("arr的資料為:{"+arr[i]+"}");
}
}
}
3.1.3佇列操作的小程式:
import java.util.Scanner;
public class ArrayQueueTest {
public static void main(String[] args) {
//建立佇列
ArrayQueue queue = new ArrayQueue(3);
//鍵盤輸入資料
Scanner scanner = new Scanner(System.in);
//設計選單操作佇列
boolean loop=true;
while (loop){
System.out.println("h(head):檢視佇列頭部資料");
System.out.println("s(show):顯示佇列的資料");
System.out.println("a(add):資料入隊");
System.out.println("g(get):資料出隊");
System.out.println("e(exit):退出選單");
System.out.printf("輸入操作:");
char key=scanner.next().charAt(0);//用於接收使用者輸入,charAt(0):輸入的首字元
switch (key){
case 'h':
try {
int queue1 = queue.headQueue();
System.out.println("佇列頭部資料:"+queue1);
}catch (Exception e){
System.out.println(e.getMessage());
};break;
case 's':
queue.showQueue();break;
case 'a':
System.out.printf("輸入一個資料入隊:");
int value=scanner.nextInt();
queue.addQueue(value);break;
case 'g':
try {
int queue1 = queue.getQueue();
System.out.println("資料出隊:"+queue1);
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case 'e':
scanner.close();//關閉鍵盤輸入
loop=false;
break;
default:
System.out.println("無效操作");break;
}
}
System.out.println("程式結束");
}
}
3.1.4 問題
陣列僅可使用一次
3.1.5 優化
將陣列改造成環型佇列
3.1 陣列模擬環型佇列:(取模法)(18號晚更新)
相關文章
- 資料結構筆記——佇列資料結構筆記佇列
- 資料結構學習之佇列資料結構佇列
- JS資料結構學習:佇列JS資料結構佇列
- 資料結構學習筆記資料結構筆記
- 學習JavaScript資料結構(一)——棧和佇列JavaScript資料結構佇列
- 資料結構學習筆記--棧資料結構筆記
- 資料結構學習筆記1資料結構筆記
- 重學資料結構(三、佇列)資料結構佇列
- 重學資料結構之佇列資料結構佇列
- 資料結構 - 佇列資料結構佇列
- 資料結構-佇列資料結構佇列
- 【資料結構-----佇列】資料結構佇列
- 大二資料結構學習3(棧和佇列)資料結構佇列
- 資料結構基礎學習之(棧和佇列)資料結構佇列
- 《資料結構與演算法分析》學習筆記-第六章-優先佇列資料結構演算法筆記佇列
- 資料結構學習筆記-堆排序資料結構筆記排序
- Java版-資料結構-佇列(陣列佇列)Java資料結構佇列陣列
- 資料結構-佇列、棧資料結構佇列
- 資料結構之「佇列」資料結構佇列
- 資料結構-佇列-樹資料結構佇列
- 資料結構——迴圈佇列PTA習題資料結構佇列
- 《JavaScript資料結構與演算法》筆記——第4章 佇列JavaScript資料結構演算法筆記佇列
- 資料結構——並查集 學習筆記資料結構並查集筆記
- Java版-資料結構-佇列(迴圈佇列)Java資料結構佇列
- C++資料結構-佇列C++資料結構佇列
- JavaScript資料結構之-佇列JavaScript資料結構佇列
- 資料結構之佇列(Queue)資料結構佇列
- 資料結構(棧和佇列)資料結構佇列
- 資料結構-棧與佇列資料結構佇列
- js資料結構--佇列(queue)JS資料結構佇列
- JavaScript資料結構03 – 佇列JavaScript資料結構佇列
- JavaScript資料結構之佇列JavaScript資料結構佇列
- 資料結構—棧和佇列資料結構佇列
- JavaScript資料結構03 - 佇列JavaScript資料結構佇列
- 前端學習 資料結構與演算法 快速入門 系列 —— 佇列和雙端佇列前端資料結構演算法佇列
- [學習筆記] Splay & Treap 平衡樹 - 資料結構筆記資料結構
- 資料結構學習筆記-佛洛依德演算法資料結構筆記演算法
- Laravel 佇列 --- database 驅動(今天剛學習了佇列,記錄下筆記)Laravel佇列Database筆記