隊列結構

隊列結構

  • 順序隊列結構 即使用一組地址連續的內存單元依次保存隊列中的數據。在程序中,可以定義一個指定大小的結構數組作爲隊列。
  • 鏈式隊列結構 即使用鏈表形式保存隊列中各元素的值。

從數據運算角度來分析,隊列結構是按照“先進先出的原則處理結點的數據”。

基礎數據

public class DATA4 {

    private String name;
    private int age;

//


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

隊列操作

public class SQType {


    static final int QUEUELEN = 15;
    DATA4[] data = new DATA4[QUEUELEN]; // 隊列數組
    int head;                           //對頭
    int tail;                           //對尾

    // 初始化隊列結構
    /**
     * 1 按符號常量QUEUELEN 指定的大小申請一片內存空間,用來保存隊列中的數據。
     * 2 設置head=0和tail=0,表示一個空棧。
     */
    SQType SQTypeInit(){
        SQType q;
        if((q = new SQType())!=null){
            q.head = 0;
            q.tail = 0;
            return q;

        }else {
            return null;
        }
    }



    // 判斷空隊列
    /**
     * 判斷空隊列即判斷一個隊列是否爲空。如果是空隊列,則表示該隊列結構中沒有數據。
     * 此時可以進行入隊列操作。但不可以進行出隊列操作。
     */
    int SQTypeIsEmpty(SQType q){
        int temp = 0;
        if(q.head == q.tail){
            temp = 1;
        }
        return (temp);
    }


    // 判斷滿隊列
    /**
     * 判斷滿隊列即判斷一個隊列結構是否爲滿。如果是滿隊列,則表示該隊列結構中沒有多餘的空間來保存數據。
     * 此時不可以進行入隊操作,但是可以進行出隊列操作。
     */
    int SQTypeIsFull(SQType q){
        int temp = 0;
        if(q.tail == QUEUELEN){
            temp = 1;
        }
        return temp;
    }

    // 清空隊列
    /**
     * 清空隊列中的所有數據。
     */
    void SQTypeClear(SQType q){
        q.head = 0; // 設置對頭
        q.tail = 0;// 設置隊尾
    }

    // 釋放空間
    /**
     * 釋放隊列結構所佔據的內存單元。
     */
    void SQTypeFree(SQType q){
        if(q!=null){
            q=null;
        }
    }

    // 入隊列
    /**
     * 1 首先判斷隊列頂tail ,如果tail等於QUEUELEN ,則表示溢出,進行出錯處理;負責執行以下操作。
     * 2 設置tail = tail+1
     * 3 將入隊元素保存到tail指向的位置。
     */
    int InSQType(SQType q,DATA4 data){
        if(q.tail == QUEUELEN){
            System.out.printf("隊列已滿!操作失敗");
            return 0;
        }else {
            q.data[q.tail++] = data;
            return 1;
        }
    }

    // 出隊列操作
    /**
     * 1 判斷隊列head,如果head等於tail,則表示爲空隊列,進行出錯處理;否則執行下面操作。
     * 2 從隊列首部取出對頭元素。
     * 3 設修改隊頭head的序號。使其指向後一個元素。
     */
    DATA4 OutSQType(SQType q){
        if(q.head == q.tail){
            System.out.printf("隊列已空!操作失敗");
        }else {
            return q.data[q.head++];
        }
        return null;
    }


    // 讀結點操作
    /**
     * 讀取頭結點數據 不刪除
     */
    DATA4 PeekSQType(SQType q){
        if(this.SQTypeIsEmpty(q)==1){
            System.out.printf("空隊列!");
            return null;
        }else {
            return q.data[q.head];
        }
    }

    // 計算隊列長度
    /**
     * 統計隊列中結點的個數。隊尾序號減去對頭序號
     */
    int SQTypeLen(SQType q){
        int temp;
        temp = q.tail - q.head;
        return temp;
    }


    //



}
發佈了42 篇原創文章 · 獲贊 2 · 訪問量 6453
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章