中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

循環(huán)隊(duì)列

2018-07-20    來源:open-open

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用

線性結(jié)構(gòu)的不多說,是一種操作受限制的線性結(jié)構(gòu),推薦隊(duì)列對比起棧學(xué)習(xí)會(huì)更簡單,也就是和棧差不多,多了而一個(gè)指針,棧是由一個(gè)頭指針就ok了,隊(duì)列多一個(gè)尾指針,因?yàn)闂J窍冗M(jìn)后出,隊(duì)列是先進(jìn)先出;比如排隊(duì)買票排在前面的先買到票;

剛開始先看普通隊(duì)列,


不斷的入隊(duì),rear往上移動(dòng),出隊(duì)front往上移動(dòng),這個(gè)隊(duì)列的實(shí)際有效區(qū)域在兩個(gè)指針之間,于是隨front往上移動(dòng)的過程中front以下的空間就不能利用了,這種就叫什么內(nèi)存泄露(好像是這么說的);

要解決這個(gè)問題就要把普通隊(duì)列改為循環(huán)隊(duì)列,下面就以循環(huán)隊(duì)列寫代碼;

在循環(huán)隊(duì)列中難理解的就是判斷隊(duì)空隊(duì)滿,在用循環(huán)隊(duì)列的時(shí)候我們將要空出一個(gè)內(nèi)存單元不用(作用見下面);

Q.front==Q.rear就為隊(duì)空,

(Q.front+1)%MAXSIZE==Q.rear就為隊(duì)滿,(MAXSIZE為隊(duì)列最大容量);這里就是說為什么循環(huán)隊(duì)列要空一個(gè)空間的原因了;還有就是(Q.front+1)%MAXSIZE這里用到了取膜的方法;

下面寫的循環(huán)隊(duì)列:

    #include<stdio.h>  
    #define M 1000  
    typedef struct quene  
    {  
        int *a;  
        int top;  
        int Tail;  
    }*Quene;  
    void Initialization(Quene);  
    void Add(Quene,int);  
    int * Out(Quene);  
    void PutAll(Quene);  
    bool Full(Quene);  
    bool Empty(Quene);  
      
    int main()  
    {  
        Quene p=new struct quene;  
        Initialization(p);  
        Add(p,2);  
        Add(p,3);  
        Add(p,4);  
        Add(p,5);  
        Out(p);  
        PutAll(p);  
        return 0;  
    }  
    void Initialization(Quene p)  
    {  
        p->a=new int[M];  
        p->top=p->Tail=0;  
    }  
    bool Full(Quene p)  
    {  
        if((p->Tail+1)%M==p->top)  
            return true;  
        return false;  
    }  
    bool Empty(Quene p)  
    {  
        if(p->top==p->Tail)  
            return true;  
        return false;  
    }  
    void Add(Quene p,int e)  
    {  
        if(Full(p))  
            return;  
        p->a[p->Tail]=e;  
        p->Tail=(p->Tail+1)%M;  
    }  
    int * Out(Quene p)  
    {  
        if(Empty(p))  
            return NULL;  
        int w;  
        w=p->a[p->top];  
        p->top=(p->top+1)%M;  
        return &w;  
    }  
    void PutAll(Quene p)  
    {  
        while(p->top!=p->Tail)  
        {  
            printf("%d ",p->a[p->top]);  
            p->top=(p->top+1)%M;  
        }  
        printf("\n");  
    }  

寫的很簡單,看懂了自己就可以多寫一些功能了,都是以int型作為基本的數(shù)據(jù)單元,在實(shí)際應(yīng)用中碰到的很多都是結(jié)構(gòu)體,或者是面向?qū)ο蟮念悾?

標(biāo)簽: 代碼

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:文件路徑及文件名字符串截取替換操作方法

下一篇:插入排序