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