C語言 簡單的佇列(陣列佇列)

weixin_34293059發表於2016-03-02
//簡單的佇列

#include<stdio.h>
#include<stdlib.h>

#define datatype int
#define N 10

//定義佇列結構體
struct queue{
    int front;//隊頭
    int endline;//隊尾
    datatype data[N];//資料
};

typedef struct queue Queue;

Queue myQueue = { 0, 0, { 0 } };

//初始化佇列
void initQueue(Queue * p);
//入隊
void enQueue(Queue *pque, datatype data);
//出隊
void deQueue(Queue *pque);
//遍歷佇列
void printfQueue(Queue *pque);

//陣列佇列只能使用一次,使用之後必須初始化後才可以繼續使用

void main(){
    Queue *pque = (Queue *)malloc(sizeof(Queue));
    initQueue(pque);
    //插入佇列
    enQueue(pque,1);
    enQueue(pque,2);
    enQueue(pque,8);
    enQueue(pque,3);
    enQueue(pque,7);
    //列印佇列
    printfQueue(pque);
    //出隊
    deQueue(pque);
    //列印佇列
    printfQueue(pque);
    deQueue(pque);
    //列印佇列
    printfQueue(pque);
    system("pause");
}

//初始化佇列
void initQueue(Queue *pque){
    pque->front = pque->endline = 0;//清空佇列
}

//入隊
void enQueue(Queue *pque,datatype data){
    //判斷佇列是否溢位
    if (pque->endline<N)
    {
        //判斷佇列是否為空
        if (pque->front == pque->endline)//隊頭和隊尾重合表明沒有元素
        {
            //初始化佇列
            initQueue(pque);
        }
        pque->data[pque->endline] = data;
        pque->endline += 1;
        
    }
    else{
        return;
    }
    
}

//出隊
void deQueue(Queue *pque){
    //判斷佇列是否為空
    if (pque->front == pque->endline)
    {
        //佇列為空
        return;
    }
    else{
        //直接彈出最後一個
        printf("彈出的元素是%d\n", pque->data[pque->front]);
        pque->front+= 1;
    }
}

//遍歷佇列
void printfQueue(Queue *pque){
    for (int i = pque->front; i < pque->endline; i++)
    {
        printf("%d\n", pque->data[i]);
    }
}

 

相關文章