国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

嵌入式常用數(shù)據(jù)結(jié)構(gòu)------隊(duì)列操作簡介

發(fā)布時(shí)間:2014-10-8 16:03    發(fā)布者:edu118gct

隊(duì)列是嵌入式軟件中常用的一種數(shù)據(jù)結(jié)構(gòu)。什么是隊(duì)列呢?在生活中,我們都知道
,買東西時(shí)要排隊(duì),比如最近iphone6開售了,買的人比較多,黃牛倒手機(jī)也要排隊(duì)
買。先來的人排在隊(duì)伍的前面,優(yōu)先購買,購?fù)旰箅x開,后到的人只有排在隊(duì)伍的
后面,且只有等前面的人都買好了才能輪到他。這種隊(duì)伍的變化狀態(tài)稱為數(shù)據(jù)結(jié)構(gòu)

今天我們就來聊一聊隊(duì)列的使用及主要運(yùn)算。隊(duì)列只能在一端(隊(duì)尾)進(jìn)入數(shù)據(jù)加
入,在另一端(隊(duì)首)進(jìn)行刪除的數(shù)據(jù)結(jié)構(gòu)。比如對于隊(duì)列(d1,d2,d3,…,dn),d1
是隊(duì)首,如果要從隊(duì)列中刪除數(shù)據(jù),只能從d1開始,如果要向隊(duì)列中添加新的數(shù)據(jù)
,只能在隊(duì)尾加入。
隊(duì)列可以通過一維數(shù)組實(shí)現(xiàn),也可以通過鏈表來實(shí)現(xiàn),我們以使用數(shù)組來說明。比
如我們可以定義一個(gè)數(shù)組a[100]表示最大長度為100的隊(duì)列。當(dāng)向新建的隊(duì)列中加入
數(shù)據(jù)時(shí),從a[0]開始,然后記錄加入的位置,當(dāng)再次向隊(duì)列中加入數(shù)據(jù)時(shí),存放在
a[1]中,依次類推。假如一直向隊(duì)列中加入數(shù)據(jù),當(dāng)向a[99]加入了數(shù)據(jù)之后,隊(duì)列
滿了。不能在之后繼續(xù)加入新的數(shù)據(jù)。假如現(xiàn)在需要從隊(duì)列中取數(shù)據(jù),要從a[0]開
始,下次取a[1],依次類推。
這樣使用的數(shù)組,如果不進(jìn)行一些其他的運(yùn)算,數(shù)組最終會(huì)被用完。一般我們在使
用時(shí),當(dāng)隊(duì)尾達(dá)到數(shù)組結(jié)尾時(shí),將隊(duì)尾重新指向數(shù)組的開始,這樣的隊(duì)列稱為循環(huán)
隊(duì)列。
在使用隊(duì)列時(shí),主要會(huì)涉及到以下運(yùn)算。
1、置空隊(duì)列:將隊(duì)列置成空的隊(duì)列。
2、判斷隊(duì)列是否空:如果隊(duì)列是空隊(duì)列,返回真,否則返回假。
3、取頭結(jié)點(diǎn):讀取隊(duì)列中頭結(jié)點(diǎn)的值,隊(duì)列中的結(jié)點(diǎn)保持不變。
4、入隊(duì):將數(shù)據(jù)插入到隊(duì)列的隊(duì)尾。
5、出隊(duì):刪除隊(duì)列頭結(jié)點(diǎn),一般與從隊(duì)列中取隊(duì)首數(shù)據(jù)同時(shí)操作。
隊(duì)列空和滿的情況分析
對于循環(huán)隊(duì)列來說,假如取數(shù)據(jù)和添加數(shù)據(jù)同時(shí)進(jìn)行,會(huì)存在隊(duì)列空或者隊(duì)列滿的
情況,假如用front來表示隊(duì)首在數(shù)組中的下標(biāo),用rear表示隊(duì)尾在數(shù)組中的下標(biāo)。
會(huì)存在front和rear相等的情況,在這種情況下,只用front和rear的值將無法區(qū)分
當(dāng)前隊(duì)列是滿還是空。
通常我們可以設(shè)置一個(gè)標(biāo)志位來表示隊(duì)滿還是隊(duì)空,當(dāng)入隊(duì)時(shí)設(shè)置flag等于1,出隊(duì)
時(shí)設(shè)置flag為0,出隊(duì)時(shí)設(shè)置為0,所以當(dāng)front和rear相等時(shí),flag等于0則隊(duì)空,
否則隊(duì)滿。深圳-鄭州-廣州-長沙嵌入式技術(shù)實(shí)訓(xùn)學(xué)習(xí),小班授課,詳情郭老師
QQ754634522
或者使用一個(gè)計(jì)數(shù)器來記錄隊(duì)列中結(jié)點(diǎn)的數(shù)量。當(dāng)計(jì)數(shù)count等于0時(shí)隊(duì)空。
同樣我們也可以少用一個(gè)節(jié)點(diǎn),將front指向的空間表示為無數(shù)據(jù)。當(dāng)front等于
rear時(shí),隊(duì)空,入隊(duì)時(shí),當(dāng)尾指針加1,等于頭指針,則說明隊(duì)列已滿。

下面我們使用第三種方法表示隊(duì)滿或隊(duì)空,來詳細(xì)分析一下隊(duì)列的運(yùn)算
1、置空隊(duì)
在隊(duì)列初始化時(shí),我們需要將隊(duì)列置為空的隊(duì)列,當(dāng)然也可以通過置空隊(duì)列也刪除
隊(duì)列中的數(shù)據(jù)(不是真正意義上的刪除,只是數(shù)據(jù)無效,可以覆蓋操作)。
將數(shù)組下標(biāo)0位置設(shè)置為不使用,因此頭尾指針值都是0
void set_null(sequeue *q)
{
q->front = 0;
q->rear =0;
}
2、判斷隊(duì)空
使用前面的最后一種方法,隊(duì)空的判斷條件就是頭指針等于尾指針
int empty(sequeue *q)
{
if(q->rear == q->front) return 1;//空隊(duì)列返回真
else return 0;//非空返回假
}
3、取頭結(jié)點(diǎn)
取出頭結(jié)點(diǎn),并不刪除頭結(jié)點(diǎn),隊(duì)列信息保持不變,如果是空隊(duì),就提示相關(guān)信息

get_front(sequeue *q)
{
if(empty(q)
{
printf(“null\n”);return  NULL;
}
else
return q->data[(q->front+1)%maxsize];//返回頭結(jié)點(diǎn)
}
4、入隊(duì)
入隊(duì)時(shí),將新結(jié)點(diǎn)插入到隊(duì)尾,隊(duì)尾指針加1,但要考慮從數(shù)組最大下標(biāo)到0的情況
,還有隊(duì)滿不能入隊(duì)的情況
int in_queue(sequeue *q,data x)
{
if((q->rear+1)%maxsize==q->front)
return NULL;
else
{
q->rear = (q->rear+1)%maxsize;
q->data[q->rear] = x;
}
}
5、出隊(duì)
出隊(duì)進(jìn)行與入隊(duì)相反的操作,要?jiǎng)h除隊(duì)列中的頭結(jié)點(diǎn)。
data del_queue(sequeue *q)
{
if(empty(q)
return NULL;//返回空指針
else
{
q->front = (q->front+1)%maxsize;
return  q->data[q->front];
}
}
在實(shí)際應(yīng)用中,隊(duì)列使用的比較多的地方是操作系統(tǒng)內(nèi)核,當(dāng)系統(tǒng)任務(wù)比較多時(shí),
需要等待的情況一般都會(huì)使用到隊(duì)列,在裸機(jī)開發(fā)中,我們也可以使用隊(duì)列,比如
使用隊(duì)列來處理觸摸屏坐標(biāo),當(dāng)點(diǎn)擊速度過快,或者觸摸屏劃動(dòng)操作時(shí),需要一直
記錄劃過的坐標(biāo),這時(shí),如果主循環(huán)處理不完,就需要構(gòu)造隊(duì)列。想學(xué)習(xí)嵌入式伙伴可以加群交流132621831

本文地址:http://www.qingdxww.cn/thread-133264-1-1.html     【打印本頁】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • Dev Tool Bits——使用MPLAB® Discover瀏覽資源
  • Dev Tool Bits——使用條件軟件斷點(diǎn)宏來節(jié)省時(shí)間和空間
  • Dev Tool Bits——使用DVRT協(xié)議查看項(xiàng)目中的數(shù)據(jù)
  • Dev Tool Bits——使用MPLAB® Data Visualizer進(jìn)行功率監(jiān)視
  • 貿(mào)澤電子(Mouser)專區(qū)
關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 99热最新网址获取 | 国产香蕉一区二区在线网站 | 日本激情视频一区二区三区 | 亚洲国产成人精品91久久久 | 陈玉莲三级未删减版在线观看 | 久久大香伊蕉在人线观看热2 | 91网站网站网站在线 | 国产一区二区三区欧美 | 日韩在线亚洲 | 欧美视频在线看 | 亚洲久热 | 高清性视频hd | 91久久青青草原线免费 | 真正免费一级毛片在线播放 | 欧美理论影院在线观看免费 | 日韩色视频一区二区三区亚洲 | 日韩三级一区二区 | 欧美视频精品在线 | 青青青手机视频在线观看 | 美女的隐私视频网站蜜桃视频 | 国产成人a一区二区 | 欧美精品片在线观看网站 | 国产日韩欧美亚洲青青草原 | 手机看片1204日韩一区二区 | 四虎影视4hutv最新地址在线 | 91人前露出精品国产 | 亚洲欧美日韩成人网 | 精品国内一区二区三区免费视频 | 亚洲黄色网站视频 | 国产手机国产手机在线 | 久久国产精品一国产精品 | 99视频免费看 | 五月花综合网 | jav008.app| 亚洲精品v欧美精品动漫精品 | 老妇毛片久久久久久久久 | 国产麻豆高清在线观看 | 奇淫三国 | 九九热在线视频观看 | 午夜视频免费在线播放 | 91麻豆免费|