
前言
上一章節針對于C語言棧結構做了解析,不清楚的可以回顧一下。
本章節主要針對于C語言的基礎數據結構隊列做以解析。
數據結構之隊列
隊列是一種特殊的 線性表 ,特殊之處在于它只允許在表的前端(front)進行刪除操作,而在表的后端(rear)進行插入操作,和棧一樣,隊列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。
故隊列基本操作如下:
(1)創建隊列
(2)入隊
(3)出隊
(4)判斷隊列是否為NULL
(5)獲取隊頭元素
數據結構之隊列分類
根據隊列實現方式與出隊方式,我們可以把棧分為以下三種描述方式:
(1)原生數組隊列
(2)動態申請內存的數組描述(普通隊列和循環隊列)
(3)鏈式結構描述

優先隊列
原生數組描述隊列
數組描述棧,只不過多了先進先出的限制而已,它是靜態分配的,即使用前,它的內存就已經以數組的形式分配好了,所以在使用時,需要注意隊頭隊尾的標記。
原生數組描述隊列實現試題案例:逆序整數

動態數組描述隊列
動態申請內存的數組描述不再采用上述實用性的方法了,而是通過封裝相關隊列函數去描述這種結構。這是寫數據結構的一種大致方法。
1.結構體定義與隊列的創建過程:
結構體定義:描述隊列的屬性:隊頭標記,隊尾標記,隊列空間
創建隊列其實就是創建結構體變量
具體代碼

ps:隊頭和隊尾頂標記初始值一般都是-1 ,為了滿足隊列標記和數組下標一致
2.入隊操作
注意: 我們的實現是將最新的元素放在了數組的末尾, 那么數組末尾的元素就是我們的隊列隊尾元素,故可以使用隊尾標記去計算隊列中的元素個數。然后每次入隊后,隊尾標記往后移動。
具體實現代碼:

3.出隊操作和獲取隊頭元素
注意: 出隊操作應該是將隊頭元素刪除,由于數組實現的隊列無法刪除,故只能把隊頭標記往隊尾移動,簡稱為一種"偽刪除"。
具體實現代碼:

4.判斷棧是否為空
用戶判斷棧中是否有元素,通過隊尾和隊頭標記去做即可
具體實現代碼:

動態申請內存的數組描述隊列測試代碼

ps:循環隊列是通過取余形成的循環,這里不過多介紹,有興趣的可以看看相關資料。
鏈式隊列
鏈式隊列: 鏈表的尾插法即可

具體實現源碼獻上
#include
優先隊列:根據優先權去決定你出隊的元素,故數據中存在優先權衡量的值,相關實現代碼如下:
#include
希望對大家有幫助!
另外如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!
C語言C++編程學習:
點擊領取C/C++編程學習資料?jq.qq.com分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)
歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!
編程學習軟件分享:

編程學習視頻分享:
