C語言編程學習:線性結構的兩種常見應用之二:隊列

C語言是面向過程的窍帝,而C++是面向對象的

C和C++的區(qū)別:

C是一個結構化語言靡砌,它的重點在于算法和數據結構牙言。C程序的設計首要考慮的是如何通過一個過程梳星,對輸入(或環(huán)境條件)進行運算處理得到輸出(或實現過程(事務)控制)。

C++异袄,首要考慮的是如何構造一個對象模型通砍,讓這個模型能夠契合與之對應的問題域,這樣就可以通過獲取對象的狀態(tài)信息得到輸出或實現過程(事務)控制烤蜕。 所以C與C++的最大區(qū)別在于它們的用于解決問題的思想方法不一樣封孙。之所以說C++比C更先進,是因為“ 設計這個概念已經被融入到C++之中 ”讽营。

C與C++的最大區(qū)別:在于它們的用于解決問題的思想方法不一樣虎忌。之所以說C++比C更先進,是因為“ 設計這個概念已經被融入到C++之中 ”橱鹏,而就語言本身而言膜蠢,在C中更多的是算法的概念堪藐。那么是不是C就不重要了,錯挑围!算法是程序設計的基礎礁竞,好的設計如果沒有好的算法,一樣不行杉辙。而且模捂,“C加上好的設計”也能寫出非常好的東西。

線性結構的兩種常見應用之二:隊列

定義:一種可以實現先進先出的存儲結構奏瞬。

分類:

鏈式隊列:以鏈表實現的隊列

靜態(tài)隊列:以數組實現的隊列枫绅。

靜態(tài)隊列通常都必須是循環(huán)隊列:

靜態(tài)隊列為什么必須是循環(huán)隊列泉孩?

小編推薦一個學C語言/C++的學習裙【 六九九硼端,四七零,五九六 】寓搬,無論你是大牛還是小白珍昨,是想轉行還是想入行都可以來了解一起進步一起學習!裙內有開發(fā)工具句喷,很多干貨和技術資料分享镣典!

如上圖,一個隊列唾琼,從0到8共9個元素兄春,把-1放在位置0,-2放在位置1锡溯,依次赶舆。如果f(front指針)指向第一個(0),那么r(rear指針)則指向最后一個的下一個(8)祭饭,如果f指向第一個元素的前一個元素(0前芜茵,f1),那么r則指向最后一個元素(r1)倡蝙。以f指向第一個元素九串,r指向最后一個元素的后一個,如果在隊列中增加一個元素寺鸥,比如把-9放在位置8猪钮,那么r則指向8的下一個。如果是刪除隊列元素胆建,比如刪除-1烤低,則f指向-2.也就是f指針用來刪除元素,r指針用來增加元素眼坏。如果用傳統(tǒng)的數組來實現隊列拂玻,增加元素酸些,r只能往上移,刪除元素檐蚜,f也是往上移魄懂。比如刪除3個元素,則f指向-4闯第,因為f只能增市栗,那么導致-1、-2咳短、-3這3個元素占據的內存位置將無法再使用填帽。所以用傳統(tǒng)數組來實現的隊列必須是循環(huán)隊列!循環(huán)

隊列需要幾個參數來確定咙好?

需要兩個參數來確定:front篡腌,rear

循環(huán)隊列各個參數的含義 ,2個參數不同場合有不同的含義:

1)隊列初始化:front和rear的值都是零勾效;

2)隊列非空嘹悼;

front代表的是隊列的第一個元素

rear代表隊的最后一個有效元素的下一個元素

3)隊列空front和rear的值相等,但不一定是零层宫。

循環(huán)隊列入隊偽算法:兩步:

1杨伙、將入隊值存入r所指向的位置

2、將r指向下一個位置

錯誤寫法:r=r+1萌腿;

正確寫法:r=(r+1)%數組長度限匣,實現r的循環(huán)

循環(huán)對列出隊偽算法:一步:

f=(f+1)%數組長度

如何判斷循環(huán)隊列為空?如果f與r相等毁菱,則該隊列為空米死。

如何判斷循環(huán)隊列已滿:

兩個方法:

1、增加一個表示隊列內元素個數的參數鼎俘;

2哲身、隊列少用一個元素,即長度為N的隊列贸伐,只能放N-1個元素勘天,if (r+1)%數組長度 == f 則隊列滿。

隊列主要算法:

出隊

入隊

隊列的具體應用:

所有和時間有關的操作都與隊列有關

////////////////////////////////////////////////////////////////////////

///程序示例

#include

#include

#include

typedef struct Queue{

int * pBase;

int front;

int rear;

}QUEUE, * PQUEUE;

void init_queue(PQUEUE pq);

bool en_queue(PQUEUE pq,int val);

bool isFull(PQUEUE pq);

void traverse_queue(PQUEUE pq);

bool isEempty(PQUEUE pq);

bool out_queue(PQUEUE pq,int * val);

int main(void)

{

int outval;

QUEUE q;

init_queue(&q);

en_queue(&q,11);

en_queue(&q,13);

en_queue(&q,15);

en_queue(&q,17);

en_queue(&q,19);

en_queue(&q,21);

en_queue(&q,24);

traverse_queue(&q);

if(out_queue(&q,&outval))

{

小編推薦一個學C語言/C++的學習裙【 六九九捉邢,四七零脯丝,五九六 】,無論你是大牛還是小白伏伐,是想轉行還是想入行都可以來了解一起進步一起學習宠进!裙內有開發(fā)工具,很多干貨和技術資料分享藐翎!

printf("out queue success!the out value is %d ",outval);

}

else

{

printf("out queue failed! ");

}

traverse_queue(&q);

en_queue(&q,24);

traverse_queue(&q);

out_queue(&q,&outval);

traverse_queue(&q);

out_queue(&q,&outval);

traverse_queue(&q);

out_queue(&q,&outval);

traverse_queue(&q);

out_queue(&q,&outval);

traverse_queue(&q);

out_queue(&q,&outval);

traverse_queue(&q);

out_queue(&q,&outval);

traverse_queue(&q);

out_queue(&q,&outval);

return 0;

}

void init_queue(PQUEUE pq)

{

pq->pBase = (int *)malloc(sizeof(int) * 6);

pq->front = 0;

pq->rear = 0;

}

bool isFull(PQUEUE pq)

{

if((pq->rear + 1)%6 == pq->front)

return true;

else

return false;

}

bool isEmpty(PQUEUE pq)

{

if(pq->front == pq->rear)

return true;

else

return false;

}

bool en_queue(PQUEUE pq,int val)

{

if(isFull(pq))

{

printf("隊列已滿 ");

return false;

}

else

{

pq->pBase[pq->rear] = val;

pq->rear = (pq->rear +1)%6;

return true;

}

}

bool out_queue(PQUEUE pq,int * val)

{

if(isEmpty(pq))

{

printf("the queue is empty! ");

return false;

}

* val = pq->pBase[pq->front];

pq->front = (pq->front + 1)%6;

return true;

}

void traverse_queue(PQUEUE pq)

{

int i = pq->front;

while(i != pq->rear)

{

printf("%d ",pq->pBase[i]);

i = (i + 1)%6;

}

printf(" ");

}

小編推薦一個學C語言/C++的學習裙【 六九九材蹬,四七零实幕,五九六 】,無論你是大牛還是小白堤器,是想轉行還是想入行都可以來了解一起進步一起學習昆庇!裙內有開發(fā)工具,很多干貨和技術資料分享闸溃!

////////////////////////////////////////////////////////////////////////

這些是C/C++能做的

服務器開發(fā)工程師整吆、人工智能、云計算工程師辉川、信息安全(黑客反黑客)表蝙、大數據 、數據平臺乓旗、嵌入式工程師府蛇、流媒體服務器、數據控解寸齐、圖像處理欲诺、音頻視頻開發(fā)工程師、游戲服務器渺鹦、分布式系統(tǒng)、游戲輔助等

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末蛹含,一起剝皮案震驚了整個濱河市毅厚,隨后出現的幾起案子,更是在濱河造成了極大的恐慌浦箱,老刑警劉巖吸耿,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異酷窥,居然都是意外死亡咽安,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門蓬推,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妆棒,“玉大人,你說我怎么就攤上這事沸伏「馍海” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵毅糟,是天一觀的道長红选。 經常有香客問我,道長姆另,這世上最難降的妖魔是什么喇肋? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任坟乾,我火速辦了婚禮,結果婚禮上蝶防,老公的妹妹穿的比我還像新娘糊渊。我一直安慰自己,他們只是感情好慧脱,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布饱亮。 她就那樣靜靜地躺著,像睡著了一般愚战。 火紅的嫁衣襯著肌膚如雪抚垄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天氮采,我揣著相機與錄音殷绍,去河邊找鬼。 笑死鹊漠,一個胖子當著我的面吹牛主到,可吹牛的內容都是我干的。 我是一名探鬼主播躯概,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼登钥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了娶靡?” 一聲冷哼從身側響起牧牢,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎姿锭,沒想到半個月后塔鳍,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡呻此,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年轮纫,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片焚鲜。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡掌唾,死狀恐怖,靈堂內的尸體忽然破棺而出恃泪,到底是詐尸還是另有隱情郑兴,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布贝乎,位于F島的核電站情连,受9級特大地震影響,放射性物質發(fā)生泄漏览效。R本人自食惡果不足惜却舀,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一虫几、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧挽拔,春花似錦辆脸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至术裸,卻和暖如春倘是,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背袭艺。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工搀崭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人猾编。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓瘤睹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親答倡。 傳聞我的和親對象是個殘疾皇子轰传,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內容