日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言 队列的运用

發(fā)布時間:2023/12/31 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言 队列的运用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

隊列最主要的作用啊是用來管理數(shù)據(jù)流的,防止數(shù)據(jù)因為傳輸頻率過快得不到及時處理而丟失。

隊列的原理就是先進先出,類似于管道

循環(huán)隊列的引用 正常的隊列出隊和入隊都是通過隊首和隊尾指針的移位來實現(xiàn)的 如果用正常的順序隊列的話 buff也會根據(jù)首尾指針的移位而一直增加其分配的數(shù)據(jù)存儲空間,為解決這一問題我們引用了循環(huán)隊列??

跟著程序進行邏輯講解?

queue.h中定義隊列結(jié)構(gòu)體

typedef struct ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//隊列的結(jié)構(gòu)定義
{
? ? int *base ;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?隊列緩存指針
? ? int front ;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 首地址指針
? ? int rear ;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?尾地址指針
} SqQueue ;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

#define MAXIZE 11 ? ? ? ? ? ? ? ? ? ? ? ? ? ? //隊列長度? 跟初始化分配的內(nèi)存空間

初始化隊列?

void InitQueue( SqQueue *Q ) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
{
? ? Q->base = ( int* )malloc( sizeof( int ) * MAXIZE ) ; ? ? ??
? ? Q->front = Q->rear = 0 ;

}? ? ?C 庫函數(shù)?void *malloc(size_t size)?分配所需的內(nèi)存空間,并返回一個指向它的指針。

首尾地址指向0

入隊

void EnQueue( SqQueue *Q , int val ) ? ? ? ? ? ? ? ? ? ?
{
? ? if( ( Q->rear + 1 ) % MAXIZE == Q->front ) ?DeQueue(Q); ? ? ? ? ? ? ? //用來保證隊列滿的時候,數(shù)組仍留出一個空閑空間 ?判斷隊滿后出隊一個 然后再讓數(shù)據(jù)入隊
? ? ? ? Q->base[ Q->rear ] = val ;
? ? ? ? Q->rear = ( Q->rear +1 ) % MAXIZE ;
}? ?( Q->rear +1 ) % MAXIZ(加一% MAXIZE 求余的含義就是讓指針在0到MAXIZE循環(huán))

出隊

void DeQueue( SqQueue *Q ?) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//出隊 ? ? ? ??
{
? ? if( Q->front == Q->rear ) ?return; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //隊中沒有數(shù)據(jù)
? ? else Q->front = ( Q->front + 1 ) % MAXIZE ;
}? ?同上一樣

運用小技巧就是我們可以直接用(Q.base[Q.rear])-(Q.base[Q.front])首尾指針來獲取我們當(dāng)前的起始隊列數(shù)據(jù)? 進行運算? 或者可以通過指針(+-)來獲取當(dāng)前隊列任何一處的數(shù)據(jù)

總結(jié)

以上是生活随笔為你收集整理的c语言 队列的运用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。