/*
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;
}