DP做題記錄
阿新 • • 發佈:2022-04-06
陣列佇列
佇列是一個有序列表,可以通過陣列或者連結串列來實現,遵循先進先出原則
佇列陣列,有幾個屬性
- 首先,要有一個數組
- 頭指標
- 尾指標
- 陣列的最大容量
1. 建立一個佇列容器
`
public ArrayQueue(int arrMaxSize) {
maxSize = arrMaxSize;
arr = new int[maxSize];
front = -1;//指向佇列頭部,分析front指向佇列頭的一個位置
rear = -1;//指向佇列尾部,(即佇列最後的一位資料)
}`
2. 判斷佇列是否為空或者為滿
·
public boolean isFull() { return rear == maxSize - 1; } //判斷佇列是否為空 public boolean isEmpty() { return front == rear; }·
3.新增資料到佇列
`
public void addQueue(int n) {
//判斷佇列是否為滿
if (isFull()) {
System.out.println("佇列滿,不能新增資料庫");
return;
}
// 若佇列未滿,向佇列中新增資料,隊尾指標加1
rear++;
arr[rear] = n;
}`
4.獲取佇列資料,出佇列
`
public int getQueue() { //判斷是否為空 if (isEmpty()) { //通過丟擲異常,來處理空佇列 throw new RuntimeException("佇列是空的,不能取資料"); } front++; return arr[front]; }`
5.顯示佇列資料
`
public void showQueue() {
if (isEmpty()) {
System.out.println("佇列是空的,不能取資料");
return;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}`
6.顯示佇列頭部
`
public int headQueue() { //判斷 if (isEmpty()) { throw new RuntimeException("佇列是空的,不能取資料"); } return arr[front + 1]; }`
7.主函式
`
public static void main(String[] args) {
ArrayQueue a1 = new ArrayQueue(3);
int key = 0;//接受使用者資料
Scanner scanner = new Scanner(System.in);
//輸出一個選單
while (true){
System.out.println("1,顯示佇列");
System.out.println("2,新增資料");
System.out.println("3,從佇列取資料");
System.out.println("4,檢視佇列頭部");
System.out.println("5,退出程式");
key = scanner.nextInt();
switch (key){
case 1:
a1.showQueue();
break;
case 2:
System.out.println("請輸入一個數");
int i = scanner.nextInt();
a1.addQueue(i);
break;
case 3:
try {
int queue = a1.getQueue();
System.out.println("取出的資料是:"+queue);
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case 4:
try{ int i1 = a1.headQueue();
System.out.println("佇列頭是:"+i1);}
catch (Exception e){
System.out.println(e.getMessage());
}
break;
case 5:
System.exit(0);
}
}
}
}`
全部程式碼
import java.util.Scanner;
public class ArrayQueueDemo01 {
//佇列是一個有序列表,可以用陣列或者連結串列實現
//遵從先進先出的原則
//陣列模擬佇列實現
//判斷佇列是否滿和空
public static void main(String[] args) {
ArrayQueue a1 = new ArrayQueue(3);
int key = 0;//接受使用者資料
Scanner scanner = new Scanner(System.in);
//輸出一個選單
while (true){
System.out.println("1,顯示佇列");
System.out.println("2,新增資料");
System.out.println("3,從佇列取資料");
System.out.println("4,檢視佇列頭部");
System.out.println("5,退出程式");
key = scanner.nextInt();
switch (key){
case 1:
a1.showQueue();
break;
case 2:
System.out.println("請輸入一個數");
int i = scanner.nextInt();
a1.addQueue(i);
break;
case 3:
try {
int queue = a1.getQueue();
System.out.println("取出的資料是:"+queue);
}catch (Exception e){
System.out.println(e.getMessage());
}
break;
case 4:
try{ int i1 = a1.headQueue();
System.out.println("佇列頭是:"+i1);}
catch (Exception e){
System.out.println(e.getMessage());
}
break;
case 5:
System.exit(0);
}
}
}
}
/*佇列陣列,三個屬性
1,頭指標
2,尾指標
3,陣列的最大容量
4,要有一個數組
*/
class ArrayQueue {
private int maxSize;//陣列的最大容量
private int front;//佇列的頭指標
private int rear;//佇列的尾指標
private int[] arr;//該陣列用來作為佇列儲存陣列的工具
//建立一個佇列構造器
public ArrayQueue(int arrMaxSize) {
maxSize = arrMaxSize;
arr = new int[maxSize];
front = -1;//指向佇列頭部,分析front指向佇列頭的一個位置
rear = -1;//指向佇列尾部,(即佇列最後的一位資料)
}
//判斷佇列是否為滿
public boolean isFull() {
return rear == maxSize - 1;
}
//判斷佇列是否為空
public boolean isEmpty() {
return front == rear;
}
//新增資料到佇列
public void addQueue(int n) {
//判斷佇列是否為滿
if (isFull()) {
System.out.println("佇列滿,不能新增資料庫");
return;
}
// 若佇列未滿,向佇列中新增資料,隊尾指標加1
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[i]);
}
}
//顯示佇列的頭部
public int headQueue() {
//判斷
if (isEmpty()) {
throw new RuntimeException("佇列是空的,不能取資料");
}
return arr[front + 1];
}
}`