循環(huán)隊(duì)列結(jié)構(gòu)(C語(yǔ)言)

# include <stdio.h>
# include <malloc.h>

//隊(duì)列的特點(diǎn)是 =》先進(jìn)先出
//所以 出列是從頭元素出列
//     入列的從尾元素入列

typedef struct Queue
{
    int * pBase;
    int front;      //出列 (隊(duì)列頭元素)
    int rear;       //入列  (隊(duì)列尾元素)
}QUEUE,* pQUEUE;

//初始化隊(duì)列
void init(pQUEUE pQ);
//是否滿的
bool is_full(pQUEUE pQ);
//入列
bool en_queue(pQUEUE pQ,int val);
//輸出隊(duì)列元素
void traverse(pQUEUE pQ);
//是否空格
bool is_empty(pQUEUE pQ);
//出列
bool out_queue(pQUEUE pQ,int * pVal);


int main(void)
{
    Queue Q;

    init(&Q);
    en_queue(&Q,1);
    en_queue(&Q,2);
    en_queue(&Q,3);
    en_queue(&Q,4);
    en_queue(&Q,5);
    en_queue(&Q,6);
    en_queue(&Q,7);

    traverse(&Q);
    
    int val;
    if(out_queue(&Q,&val)){
        printf("出列成功 %d \n", val);
    }

    traverse(&Q);

    return 0;
}

void init(pQUEUE pQ)
{
    pQ->pBase = (int *)malloc(sizeof(int) * 6);
    pQ->front = 0;
    pQ->rear = 0;
}

bool is_full(pQUEUE pQ)
{
    if((pQ->rear+1) % 6 == pQ->front)   //不超過(guò)一圈||超過(guò)則表示已經(jīng)滿了
        return true;
    else 
        return false;
}

bool en_queue(pQUEUE pQ,int val)        //入列數(shù)組尾元素入列
{
    if( is_full(pQ) ){
        return false;
    }else{

        pQ->pBase[pQ->rear] = val;      //規(guī)定,入列時(shí)尾指針+1
        pQ->rear = (pQ->rear+1) % 6;    //循環(huán)隊(duì)列  (數(shù)組指向下一個(gè))|| 范圍只能在數(shù)組的大小之間,形成一個(gè)臆想的環(huán)狀結(jié)構(gòu) || 當(dāng)超過(guò)6則滿

        return true;
    }
}

void traverse(pQUEUE pQ)
{
    int i = pQ->front;

    while(i != pQ->rear)    //只要不相等,就說(shuō)明還有元素未輸出
    {
        printf("%d ",pQ->pBase[i]);
        i = (i+1) % 6;      //在一個(gè)循環(huán)內(nèi)
    }
    printf("\n");
}

bool is_empty(pQUEUE pQ)
{
    if(pQ->front == pQ->rear){
        return true;
    }else{
        return false;
    }
}

bool out_queue(pQUEUE pQ, int * pVal)       //出列數(shù)組頭元素出列
{
    if(is_empty(pQ)){
        return false;
    }else{
        *pVal = pQ->pBase[pQ->front];       //規(guī)定,出列時(shí)頭指針+1
        pQ->front = (pQ->front+1) % 6;
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容