隊列的類型定義


隊列示意圖:

隊頭(Front)離開

隊尾(Rear)進入

隊列(Queue)是僅能在表耳我進行插入操作,在表頭進行刪除操作的線性表。

表尾即 an 端,稱為隊尾;

表頭即 a1 端,稱為隊頭。

它是一種先進先出(FIFO)的線性表

 

 

插入元素稱為“入隊”;

刪除元素稱為“出隊”。

隊列的存儲結構為鏈隊或順序隊(常用循環順序隊)

隊列的相關概念:

① 定義:只能在標的一端進行插入運算,在表的另一端進行刪除運算的線性表(頭刪尾插)

② 邏輯結構:同線性表相同,仍為一對一關系

③ 存儲結構:順序隊或鏈隊,以循環順序隊列更常見

④ 運算規則:只能在隊首和隊尾運算,且訪問結點時依照先進先出(FIFO)的原則

⑤ 實現方式:關鍵是掌握入隊和出隊操作,具體實現依順序隊或鏈隊的不同而不同。

 

隊列常見應用:

① 脫機打印輸出:按申請的先后順序依次輸出

② 多用戶系統中,多個用戶排成隊,分時地循環使用 CPU 和 主存

③ 按用戶的優先級排成多個隊,每個優先級一個隊列

④ 實時控制系統中,信號按接收的先后順序依次處理

⑤ 網絡電文傳輸,按到達的時間先后順序依次進行

凡是在使用有限資源時,有多個想要使用此資源都需要排隊,而在排隊時都需要用到隊列。

 

隊列的抽象數據及類型定義:

① 數據對象:D = {ai | ai ∈ ElemSet, i = 1,2,3,4....,n, n ≥ 0}

② 數據關系:R = {<ai-1 , ai> | ai-1 , ai ∈ D , i = 2,....,n}  約定 a1 端為隊列頭,an 端為隊列尾

③ 基本操作:

                    InitQueue(&Q) 操作結果:構造空隊列 Q

                    DestroyQueue(&Q) 條件:隊列 Q 已存在;操作結果:隊列 Q 被銷毀

                    ClearQueue(&Q) 條件:隊列 Q 已存在;操作結果:將 Q 清空

                    QueueLength(Q) 條件:隊列 Q 已存在;操作結果:返回 Q 的元素個數,即隊列長度

                    GetHead(Q,&e) 條件:Q 為非空隊列;操作結果:用 e 返回 Q 的隊頭元素

                    EnQueue(&Q, e) 條件:隊列Q已存在;操作結果:插入元素 e 為 Q 的隊尾元素

                    DeQueue(&Q, e) 條件:Q為非空隊列;操作結果:刪除 Q 的隊頭元素,用 e 返回值

 

隊列的物理存儲可以用順序存儲結構,也可以用鏈式存儲結構。相應的,隊列的存儲方式分為兩種,即順序隊列和鏈式隊列

隊列的順序表示——用一維數組 base [MAXQSIZE]

#define MAXQSIZE 100 //最大隊列長度,如果有需要可以修改這個值
Typedef struct{
    //看一下要存儲的是什么類型,就把 QElemType 進行對應修改
    //比如要存儲 int 型,就把 QElemType 更換為 int 
    QElemType *base; //初始化的動態分配存儲空間

    // front 和 rear 稱作指針,卻不是指針變量,用以表示下標
    int front; //頭指針,隊頭元素的下標
    int rear; //尾指針,隊尾元素的下標
}SqQueue;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM