一.簡介
在嗶哩嗶哩看視頻學的,赫斌老師數(shù)據(jù)結(jié)構(gòu)入門的內(nèi)容-b站搜索:av6159200(P47),通過學習循環(huán)隊列,能獨立把赫斌老師教的敲出來,并且自己摸索著實現(xiàn)鏈式隊列.
第三部分最后面有我鏈式隊列的ppt圖解下載
二.什么是隊列
隊列與棧有一個明顯的區(qū)別就是,棧是先進后出,而隊列是先進先出.
隊列與棧有一個相同點就是那就是一開始都i有頂部(top)和底部(bottom),但是為了與棧產(chǎn)生區(qū)別,我們隊列用前部(front)和后部(rear).
數(shù)組的隊列為什么要是循環(huán)隊列呢?
因為數(shù)組剛開始的長度是確定的,如果每次出隊之后不循環(huán)的話,就造成空間浪費,并且越用越少.
如圖:
通過圖可以看出,如果數(shù)組不是循環(huán)的話,0,1,2這3個數(shù)組以后都用不了了,所以數(shù)組隊列需要循環(huán)
至于鏈表,他就沒有要循環(huán)的要求,它在內(nèi)存充足的情況下,可以一直無限增加...
先進先出圖解:
從圖可以看出,只要是第一個進的就是第一個出的,隊列就是要滿足這樣的要求.就跟我們車站排隊買票一樣.
三.循環(huán)隊列的圖解
一定在移動的時候要用這個 前部 = (前部+1)%數(shù)組長度? ? ? ? ? ? 后部 = (后部+1)%數(shù)組長度 的循環(huán)公式
不過我個人覺得如果用判斷語句應該也行, 就是如果前部或者后部等于數(shù)組長度 前部或者后部就重新變成0, 但是這樣過于麻煩了而且感覺程序會變慢.所以還是建議用上面的公式吧.
循環(huán)隊列其它過程:百度網(wǎng)盤
鏈式隊列的圖解:百度網(wǎng)盤
四.函數(shù)功能實現(xiàn)的源碼
void init(QUEUE *); ???????????????????????????????????????????????? //初始化
void lnput_queue(QUEUE *, int );???????????????????????????? //入隊 輸入
int full_queue(QUEUE *); ???????????????????????????????????????? //判斷是否滿
void traversing_queue(QUEUE *); ???????????????????????? //遍歷輸出
int air_queue(QUEUE *); //判斷是否為空
int out(QUEUE *, int *); ???????????????????????????????????????????? //出隊
五.源碼分享(可復現(xiàn))
循環(huán)隊列(數(shù)組):百度網(wǎng)盤
鏈式隊列(鏈表):百度網(wǎng)盤
六.隊列的應用
? ??????一切與時間相關的都與隊列有聯(lián)系.