用c语言实现循环队列代码,用c语言实现循环队列(FIFO)

循环队列是通过数组实现的一种队列

#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;

}