數據結構--隊列(C語言版)

/*

        main 函數部分

*/

#include <stdio.h>
#include <stdlib.h>
#include "MQueue.h"
/*
    隊列:和時間因素有關的方面都需要隊列
*/
int main()
{
    int del;

    pMQueue pQueue;
    Init(pQueue);
    EnQueue(pQueue, 3);
    EnQueue(pQueue, 4);
    EnQueue(pQueue, 5);
    EnQueue(pQueue, 6);
    EnQueue(pQueue, 7);
    EnQueue(pQueue, 8);
    EnQueue(pQueue, 9);

    Traverse(pQueue);

    DeQueue(pQueue, & del);
    Traverse(pQueue);


    return 0;
}

/*

        函數聲明的頭文件部分 MQueue.h

*/

#ifndef MQUEUE_H_INCLUDED
#define MQUEUE_H_INCLUDED
#include <stdbool.h>

typedef struct _mqueue
{
    int * base;
    int Front;
    int Rear;
}* pMQueue, MQueue;

void Init(pMQueue);            //初始化
bool EnQueue(pMQueue, int);    //入隊
bool DeQueue(pMQueue, int *);  //出隊
void Traverse(pMQueue);        //遍歷
bool FullQueue(pMQueue);       //判斷是否滿
bool EmptyQueue(pMQueue);      //判斷是否爲空


#endif // MQUEUE_H_INCLUDED

/*

        函數聲明的頭文件實現部分 MQueue.c

*/

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include "MQueue.h"

void Init(pMQueue pQueue)//初始化
{
    pQueue->base = (int *)malloc(sizeof(int) * 6);//爲數組動態分配內存空間,大小爲6個int型
    pQueue->Front = 0;
    pQueue->Rear = 0;

    return;
}

bool EnQueue(pMQueue pQueue, int val)//入隊
{
    if(FullQueue(pQueue)){
        return false;
    }
    else
    {
        pQueue->base[pQueue->Rear] = val;
        pQueue->Rear = (pQueue->Rear + 1) % 6;//後移pQueue->Rear的位置

        return true;
    }
}

bool DeQueue(pMQueue pQueue, int * pDel)//出隊
{
    if(EmptyQueue(pQueue)){
        return false;
    }
    else{
        pDel = pQueue->base[pQueue->Front];
        pQueue->Front = (pQueue->Front + 1) % 6;
        return true;
    }
}

bool FullQueue(pMQueue pQueue)//判滿
{
    if((pQueue->Rear + 1) % 6 == pQueue->Front){
        return true;
    }
    else{
        return false;
    }
}

bool EmptyQueue(pMQueue pQueue)//判空
{
    if(pQueue->Front == pQueue->Rear){
        return true;
    }
    else{
        return false;
    }
}

void Traverse(pMQueue pQueue)//遍歷
{
    int Temp = pQueue->Front;
    printf("\n");
    while(Temp != pQueue->Rear)
    {
        printf("%d\t", pQueue->base[Temp]);
        Temp = (Temp+1) % 6;
    }

    return;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章