1.解题思路
首先,该题是设计循环队列,因此我们有两种实现方法,即数组和链表,但具体考虑后,发现数组实现要更容易一些,因此使用数组实现,因此我们要给出头和尾变量,个数变量以及一个数组,利用取模运算来达到想要的效果,要特别注意的是,为了方便个数的统计以及在判断队列是否为满方便一些,因此在开辟空间的时候直接多开辟一块,即有效空间为K,而实际开辟空间为K+1.
2.代码实现
typedef struct { int *a; int front; int back; int k; } MyCircularQueue; bool myCircularQueueIsFull(MyCircularQueue* obj) { return obj->front==(obj->back+1)%(obj->k+1); } bool myCircularQueueIsEmpty(MyCircularQueue* obj) { return obj->front==obj->back; } MyCircularQueue* myCircularQueueCreate(int k) { MyCircularQueue*obj=(MyCircularQueue*)malloc(sizeof(MyCircularQueue)); obj->a=(int *)malloc(sizeof(int)*(k+1)); obj->front=0; obj-> back=0; obj->k=k; return obj; } bool myCircularQueueEnQueue(MyCircularQueue* obj, int value) { if(myCircularQueueIsFull(obj)) return false; obj->a[obj->back]=value; obj->back++; obj->back%=(obj->k+1); return true; } bool myCircularQueueDeQueue(MyCircularQueue* obj) { if(myCircularQueueIsEmpty(obj)) return false; obj->front++; obj->front%=(obj->k+1); return true; } int myCircularQueueFront(MyCircularQueue* obj) { if(myCircularQueueIsEmpty(obj)) return -1; return obj->a[obj->front]; } int myCircularQueueRear(MyCircularQueue* obj) { if( myCircularQueueIsEmpty( obj)) return -1; return obj->a[(obj->back-1+obj->k+1)%(obj->k+1)]; } void myCircularQueueFree(MyCircularQueue* obj) { free(obj->a); free(obj); }
结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!