#include理解: 循环队列的原因#include typedef struct Queue { int* pBase; int iFront; int iRear; }QUEUE; void InitQueue(QUEUE *pQPara); bool EnQueue(QUEUE *pQPara, int val); void Traverse(QUEUE *pQPara); bool FullQueue(QUEUE *pQPara); bool DeQueue(QUEUE* pQPara,int* pDeQueueVal); bool EmptyQueue(QUEUE* pQueue); int main(void) { QUEUE Q; int iTampVal; InitQueue(&Q); EnQueue(&Q,1); EnQueue(&Q,2); EnQueue(&Q,3); EnQueue(&Q,4); EnQueue(&Q,5); Traverse(&Q); if (DeQueue(&Q, &iTampVal)) { printf("出队成功,出队元素为:%dn", iTampVal); } else { printf("出队失败n"); } Traverse(&Q); if (DeQueue(&Q, &iTampVal)) { printf("出队成功,出队元素为:%dn", iTampVal); } else { printf("出队失败n"); } Traverse(&Q); return 0; } void InitQueue(QUEUE *pQPara) { pQPara->pBase = (int* )malloc(sizeof(int)*6); pQPara->iFront = 0; pQPara->iRear = 0; return; } bool FullQueue(QUEUE* pQPara) { if ((pQPara->iRear + 1)%6 == pQPara->iFront) { return true; } else { return false; } } bool EnQueue(QUEUE *pQPara, int val) { if (FullQueue(pQPara)) { return false; } else { pQPara->pBase[pQPara->iRear] = val; pQPara->iRear = (pQPara->iRear + 1)%6; return true; } } bool EmptyQueue(QUEUE* pQueue) { if (pQueue->iFront == pQueue->iRear) { return true; } else { return false; } } bool DeQueue(QUEUE* pQPara, int* iDeQueueVal) { if (EmptyQueue(pQPara)) { return false; } else { *iDeQueueVal = pQPara->pBase[pQPara->iFront]; pQPara->iFront = (pQPara->iFront + 1) % 6; return true; } } void Traverse(QUEUE* pQPara) { int iTampVal = pQPara->iFront; while (iTampVal != pQPara->iRear) { printf("%d ", pQPara->pBase[iTampVal]); iTampVal = (iTampVal + 1) % 6; } printf("n"); }



