// 判空时用 count 记录typedef struct { int *pdata; int head; int tail; int size; int count;} MyCircularQueue;MyCircularQueue* myCircularQueueCreate(int k) { if (k <= 0) { return NULL; } MyCircularQueue* queue = (MyCircularQueue *)malloc(sizeof(MyCircularQueue)); if (!queue) { return NULL; } queue->pdata = (int *)malloc(sizeof(int) * k); queue->head = 0; queue->tail = 0; queue->size = k; queue->count = 0; for (int i = 0; i < k; i++) { queue->pdata[i] = -1; } return queue; }bool myCircularQueueIsEmpty(MyCircularQueue* obj) { return obj->count == 0;}bool myCircularQueueIsFull(MyCircularQueue* obj) { return obj->count == obj->size;}bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) { if (myCircularQueueIsFull(obj)) return false; obj->pdata[obj->tail] = value; obj->tail = (obj->tail + 1) % obj->size; obj->count++; return true;}bool myCircularQueueDeQueue(MyCircularQueue* obj) { if (myCircularQueueIsEmpty(obj)) { return false; } obj->pdata[obj->head] = -1; obj->head = (obj->head + 1) % obj->size; obj->count--; return true;}int myCircularQueueFront(MyCircularQueue* obj) { return obj->pdata[(obj->head) % obj->size];}int myCircularQueueRear(MyCircularQueue* obj) { // 当队列为空时,取尾结点,tail-1为负,所以加上一个size 长度 return obj->pdata[(obj->tail - 1 + obj->size) % obj->size]; // -1 是因为tail 指向的是该填入的位置}void myCircularQueueFree(MyCircularQueue* obj) { free(obj->pdata); free(obj);}## 不用 count , 就是多申请了一块内存,判空的方式不同,其他的完全一样MyCircularQueue* myCircularQueueCreate(int k) { if (k <= 0) { return NULL; } MyCircularQueue* queue = (MyCircularQueue *)malloc(sizeof(MyCircularQueue)); if (!queue) { return NULL; } queue->pdata = (int *)malloc(sizeof(int) * (k + 1)); queue->head = 0; queue->tail = 0; queue->size = k + 1; //queue->count = 0; for (int i = 0; i < k + 1; i++) { queue->pdata[i] = -1; } return queue; }bool myCircularQueueIsEmpty(MyCircularQueue* obj) { return obj->head == obj->tail;}bool myCircularQueueIsFull(MyCircularQueue* obj) { return obj->head == (obj->tail + 1) % obj->size;}