1. 程式人生 > 其它 >DP做題記錄

DP做題記錄

陣列佇列

佇列是一個有序列表,可以通過陣列或者連結串列來實現,遵循先進先出原則

佇列陣列,有幾個屬性

  • 首先,要有一個數組
  • 頭指標
  • 尾指標
  • 陣列的最大容量

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];
    }
}`