// 运用计数器来判断队列是否满
typedef struct _T_RevData
{
float a;
float b;
float c;
float d;
float e;
float f;
float g;
float h;
float i;
float j;
}T_RevData;
typedef struct
{
int front;
int rear;
int count;
T_RevData data[MAXSIZE];
}CirQueue;
// 置空队
void InitQueue(CirQueue *Q)
{
Q->front = Q->rear = 0;
Q->count = 0;
}
// 判断队空,为空返回真,非空返回false
bool QueueEmpty(CirQueue *Q)
{
if (Q->count == 0)
{
return true;
}
else
return false;
}
// 判断队满,满的话为真
bool QueueFull(CirQueue *Q)
{
if (Q->count == MAXSIZE)
{
return true;
}
else
return false;
}
// 入队
bool EnterQueue(CirQueue *Q, T_RevData x)
{
if (QueueFull(Q))
{
return false;
}
Q->count++;
Q->data[Q->rear] = x;
Q->rear= (Q->rear + 1) % MAXSIZE; // 循环意义下将尾指针加1
return true;
}
// 出队,出之前先要判断队列是否为空
T_RevData DeQueue(CirQueue *Q)
{
T_RevData tTemp;
tTemp = Q->data[Q->front];
Q->count--;
Q->front = (Q->front + 1) % MAXSIZE; // 循环意义下的头指针加1
return tTemp;
}
// 取队头元素, 之前也要先判断队列是否为空
T_RevData QueueFront(CirQueue *Q)
{
return Q->data[Q->front];
}
// test代码
int main()
{
T_RevData tRevData1, tRevData2;
tRevData1.a = 123.4567;
tRevData1.b = 123.4567;
tRevData1.c = 123.4567;
tRevData1.d = 123.4567;
tRevData1.e = 123.4567;
tRevData1.f = 123.4567;
tRevData1.g = 123.4567;
tRevData1.h = 123.4567;
tRevData1.i = 123.4567;
tRevData1.j = 123.4567;
//
tRevData2 = tRevData1;
// 队列运用
CirQueue tTestQueue;
InitQueue(&tTestQueue);
for (int i = 0; i < 10; i++)
{
EnterQueue(&tTestQueue, tRevData1);
}
tRevData2 = DeQueue(&tTestQueue);
}