佇列—標準佇列基本加入與刪除範例 - 筆記長也

佇列—標準佇列基本加入與刪除範例

2018-02-04 17:07:00   資料結構

佇列

佇列與堆疊同樣都是線性資料結構,但是佇列與堆疊不同的是佇列具有一個入口及一個出口,如下圖:

(這個圖解把 rear 及 front 對調,我看得比較順眼(?))

由於佇列會一端進入後由另一端出去,所以會形成 FIFO 先進先出,而堆疊則是 FILO 先進後出。

佇列的加入

佇列加入尾端的時候,使用一個 rear 作為指標,加入後指標 +1。

佇列的刪除

佇列從前端出去的時候,使用一個 front 作為指標,出去後指標 +1。

範例

佇列一樣可以用陣列與鏈結串列實作,這裡使用 Java 的陣列為例:

public class Queue {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int max = 3;
        String[] q = new String[max];
        int rear = -1;
        int front = 0;
        while (true) {
            System.out.println("<1>insert <2>del <3>print <4>exit");
            int inpu = input.nextInt();
            if (inpu == 1) { //加入佇列
                if (rear >= max - 1) {
                    System.out.println("佇列已經滿了");
                } else {
                    System.out.println("請輸入要加入的資料:");
                    String insertdata = input.next();
                    rear++;
                    q[rear] = insertdata;

                }
            } else if (inpu == 2) { //刪除佇列
                if (front > rear) {
                    System.out.println("此佇列為空");

                } else {
                    System.out.println(q[front] + " 已被刪除!");
                    q[front] = "";
                    front++;
                }

            } else if (inpu == 3) { //顯示佇列
                if (rear > 0 && !(front > rear)) {
                    for (int i = front; i <= rear; i++) {
                        System.out.println(q[i]);
                    }
                } else {
                    System.out.println("此佇列為空!");
                }

            } else if (inpu == 4) {
                break;

            }
        }
    }
}

執行結果:
run:
<1>insert <2>del <3>print <4>exit
1
請輸入要加入的資料:
Diamond
<1>insert <2>del <3>print <4>exit
1
請輸入要加入的資料:
ace
<1>insert <2>del <3>print <4>exit
1
請輸入要加入的資料:
ya
<1>insert <2>del <3>print <4>exit
1
佇列已經滿了
<1>insert <2>del <3>print <4>exit
3
Diamond
ace
ya
<1>insert <2>del <3>print <4>exit
2
Diamond 已被刪除!
<1>insert <2>del <3>print <4>exit
3
ace
ya
<1>insert <2>del <3>print <4>exit

關於作者


長也

資管菸酒生,嘗試成為網頁全端工程師(laravel / React),技能樹成長中,閒暇之餘就寫一些筆記。 喔對了,也愛追一些劇,例如火神跟遺物整理師,推推。最愛的樂團應該是告五人吧(?)