循环队列是通过数组实现的一种队列
#include
#define QUEUESIZE 100 //定义数组大小
typedef int DataType; //定义数组元素类型
typedef struct
{
int count; //当前队列中元素的个数
int front; //队列中第一个元素的索引
int tail; //队列中最后一个元素的下一个位置的索引
}CircleQueue;
DataType data[QUEUESIZE] = {0};
void InitCircleQueue(CircleQueue *pCQ)
{
pCQ->count = 0; //初始化后都是0
pCQ->front = 0;
pCQ->tail = 0;
}
bool IsQueueEmpty(CircleQueue *pCQ)
{
return (pCQ->count == 0);
}
bool IsQueueFull(CircleQueue *pCQ)
{
return (pCQ->count == QUEUESIZE);
}
void PushElement(CircleQueue *pCQ, DataType dNewData)
{
assert(!IsQueueFull(pCQ));
pCQ->count++;
data[pCQ->tail] = dNewData;
pCQ->tail = (pCQ->tail + 1) % QUEUESIZE; //因为是循环队列,要用这种方式
}
DataType PopElement(CircleQueue *pCQ)
{
DataType dTemp = 0;
assert(!IsQueueEmpty(pCQ));
pCQ->count--;
dTemp = data[pCQ->front];
pCQ->front = (pCQ->front + 1) % QUEUESIZE;
return dTemp;
}
int main()
{
CircleQueue CQ;
InitCircleQueue(&CQ);
PushElement(&CQ, 10);
PushElement(&CQ, 11);
PushElement(&CQ, 12);
while(1);
PopElement(&CQ);
while(1);
return 0;
}