两个吃奶一个添下面视频_人妻第一页香蕉网_欧美xxxx少妇_妺妺窝人体色www婷婷

1. 循環(huán)隊列的初始化

我們初始化相比鏈表而言更為簡單了,核心就在于申請空間以及將front指針和rear指針內(nèi)容賦值為0,即指向第0個元素即可(注意第 0個元素內(nèi)容為空)。

循環(huán)隊列初始狀態(tài)

其代碼可以表示為:

//初始化
cir_queue *init(){
    cir_queue *q = (cir_queue*)malloc(sizeof(cir_queue));
    if(q==NULL){
        exit(0);   //申請內(nèi)存失敗,退出程序
    }
    q->front=0;
    q->rear=0;
    return q;
}


2.  循環(huán)隊列入隊操作

入隊操作同順序隊列的方法,直接將rear向后移動即可,但是要注意判斷,如果rear達到了隊列的空間上線,將要從頭繼續(xù)開始移動,這里推薦使用余數(shù)法,即無論如何求余都是在這片空間內(nèi)進行操作,防止一次錯誤執(zhí)行就直接整體崩潰,而且也相對而言更為簡潔,不推薦使用if語句,這樣顯得比較累贅。

循環(huán)隊列入隊操作

注意進行加一移動位置操作的時候,不能直接q->rear++這樣的操作,這樣計算機判斷優(yōu)先級會產(chǎn)生讓自己意想不到的后果,此外這里還需要進行一次是否隊列已滿的判斷,當我們rear指針的下一個位置就是front的位置的時候,即改循環(huán)隊列已滿。

如圖:

循環(huán)隊列隊滿狀態(tài)

其代碼可以表示為:

//入隊操作push
void push(cir_queue *q,int data){
    if((q->rear+1)%maxsize==q->front){
        printf("溢出,無法入隊\n");
        return;
    }else{
        q->rear=(q->rear+1)%maxsize;
        q->data[q->rear]=data;
    }
}

3. 循環(huán)隊列出隊操作

如果順序隊列的出隊操作,直接將front進行后移一位即可,注意這時候有一個需要留意的地方,即隊列是否為空,當隊列為空的時候是無法進行出隊操作的。

循環(huán)隊列出隊操作

其代碼可以表示為:

//出隊操作pop
void pop(cir_queue *q){
    if(q->rear==q->front){
        printf("隊列為空,無法出隊\n");
        return;
    }else{
        q->data[q->front]=0;
        q->front=(q->front+1)%maxsize;
    }
}

4. 循環(huán)隊列遍歷操作

遍歷操作需要借助一個臨時變量儲存位置front的位置信息,利用i逐步向后移動,直到i到達了rear的位置即可宣告遍歷的結(jié)束。

//遍歷隊列
void print(cir_queue *q){
    int i=q->front;
    while(i!=q->rear){
        i=(i+1)%maxsize;
        printf("%d\t",q->data[i]);   
    }
    printf("\n");       //記得換行
}

5. 本題代碼代碼

#include<stdio.h>
#include<stdlib.h>
#include<cstring>
#define maxsize 10      //表示循環(huán)隊列的最大容量

//循環(huán)隊列的結(jié)構(gòu)設(shè)計
typedef struct cir_queue{
    int data[maxsize];
    int rear;
    int front;
}cir_queue;

//初始化
cir_queue *init(){
    cir_queue *q = (cir_queue*)malloc(sizeof(cir_queue));
    if(q==NULL){
        exit(0);    //申請內(nèi)存失敗,退出程序
    }
    memset(q->data,0,sizeof(q->data));
    q->front=0;
    q->rear=0;
    return q;
}

//入隊操作push
void push(cir_queue *q,int data){
    if((q->rear+1)%maxsize==q->front){
        printf("溢出,無法入隊\n");
        return;
    }else{
        q->rear=(q->rear+1)%maxsize;
        q->data[q->rear]=data;
    }
}

//出隊操作pop
void pop(cir_queue *q){
    if(q->rear==q->front){
        printf("隊列為空,無法出隊\n");
        return;
    }else{
        q->data[q->front]=0;
        q->front=(q->front+1)%maxsize;
    }
}

//遍歷隊列
void print(cir_queue *q){
    int i=q->front;
    while(i!=q->rear){
        i=(i+1)%maxsize;
        printf("%d\t",q->data[i]);   
    }
    printf("\n");       //記得換行
}

int main(){
    cir_queue *q = init();
    ////////////入隊操作///////////////
    printf("入隊操作\n");
    for(int i=1;i<=6;i++){
        push(q,i);
    }
    print(q);
    ////////////出隊操作///////////////
    printf("出隊操作\n");
    for(int i=1;i<=3;i++){
        pop(q);
        print(q);
    }
    return 0;
}


6.  配套題目推薦

畢竟循環(huán)隊列只是隊列的基本優(yōu)化,可以使用普通順序隊列的練習(xí)題再度練習(xí):

1895題

點贊(0)

C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:

一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程

解決困擾你多年的C語言疑難雜癥特性的C語言進階課程

從零到寫出一個爬蟲的Python編程課程

只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程

信息學(xué)奧賽或C++選手的 必學(xué)C++課程

藍橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程

手把手講解近五年真題的藍橋杯輔導(dǎo)課程

Dotcpp在線編譯      (登錄可減少運行等待時間)