www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 公眾號精選 > strongerHuang
[導(dǎo)讀]關(guān)注星標公眾號,不錯過精彩內(nèi)容作者|?strongerHuang微信公眾號|?嵌入式專欄“環(huán)形隊列”和“消息隊列”在嵌入式領(lǐng)域有應(yīng)用非常廣泛,相信有經(jīng)驗的嵌入式軟件工程師對它們都不陌生。但經(jīng)常看到一些初學(xué)者問一些相關(guān)的問題,今天就來分享一下關(guān)于“環(huán)形隊列”和“消息隊列”的內(nèi)容。環(huán)...

關(guān)注 星標公眾,不錯過精彩內(nèi)容

作者 |?strongerHuang

微信公眾號 |?嵌入式專欄


“環(huán)形隊列”和“消息隊列”在嵌入式領(lǐng)域有應(yīng)用非常廣泛,相信有經(jīng)驗的嵌入式軟件工程師對它們都不陌生。
但經(jīng)常看到一些初學(xué)者問一些相關(guān)的問題,今天就來分享一下關(guān)于“環(huán)形隊列”和“消息隊列”的內(nèi)容。
環(huán)形隊列

環(huán)形隊列是在實際編程極為有用的數(shù)據(jù)結(jié)構(gòu),它是一個首尾相連的FIFO的數(shù)據(jù)結(jié)構(gòu),采用數(shù)組的線性空間,數(shù)據(jù)組織簡單,能很快知道隊列是否滿為空,能以很快速度的來存取數(shù)據(jù)。


環(huán)形隊列通常用于通信領(lǐng)域,比如UART、USB、CAN、網(wǎng)絡(luò)等。


1.環(huán)形隊列實現(xiàn)原理內(nèi)存上沒有環(huán)形的結(jié)構(gòu),因此環(huán)形隊列實上是數(shù)組的線性空間來實現(xiàn)。當數(shù)據(jù)到了尾部它將轉(zhuǎn)回到0位置來處理。
因此環(huán)列隊列的邏輯:將數(shù)組元素q[0]與q[MAXN-1]連接,形成一個存放隊列的環(huán)形空間。
為了方便讀寫,還要用數(shù)組下標來指明隊列的讀寫位置。head/tail.其中head指向可以讀的位置,tail指向可以寫的位置。

環(huán)形隊列的關(guān)鍵是判斷隊列為空,還是為滿。當tail追上head時,隊列為滿時;當head追上tail時,隊列為空。但如何知道誰追上誰,還需要一些輔助的手段來判斷.?如何判斷環(huán)形隊列為空,為滿有兩種判斷方法:a.附加一個標志位tag
  • 當head趕上tail,隊列空,則令tag=0

  • 當tail趕上head,隊列滿,則令tag=1


b.限制tail趕上head,即隊尾結(jié)點與隊首結(jié)點之間至少留有一個元素的空間。
  • 隊列空:? ?head==tail

  • 隊列滿:? ?(tail 1)% MAXN ==head


2.附加標志實現(xiàn)原理
a.采用第一個環(huán)形隊列有如下結(jié)構(gòu):
typedef struct ringq{ int head; /* 頭部,出隊列方向*/ int tail; /* 尾部,入隊列方向*/ int tag ; int size ; /* 隊列總尺寸 */ int space[RINGQ_MAX]; /* 隊列空間 */}RINGQ;
初始化狀態(tài):

q->head = q->tail = q->tag = 0;

隊列為空:

( q->head == q->tail)
本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉
關(guān)閉